1. 引入PHPExcel类库

1
require_once '../Classes/PHPExcel.php';

2. 创建一个PHPExcel对象

1
$objPHPExcel = new PHPExcel();

3. 设置文档的属性

1
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")->setLastModifiedBy("Maarten Balliauw")->setTitle("PHPExcel Test Document")->setSubject("PHPExcel Test Document")->setDescription("Test document for PHPExcel, generated using PHP classes.")->setKeywords("office PHPExcel php")->setCategory("Test result file");

设置文档的属性示意图

4. 給Excel表格增加数据

1
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', 'Hello')->setCellValue('B2', 'world!')->setCellValue('C1', 'Hello')->setCellValue('D2', 'world!');

解析:setActiveSheetIndex(0)表示选择当前Excel表的第一张表并为活动表。

setCellValue('A1', 'Hello')表示在A1的位置添加上“Hello”这条数据。

給Excel表格增加数据示意图

5. 重新工作表的名称

1
$objPHPExcel->getActiveSheet()->setTitle('Simple');

重新工作表的名称示意图

解析:setTitle('Simple')定义工作表的名称为:Simple

6. 生成Excel文件(在服务器中)

1
2
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));

其中Excel2007也可以为Excel5。表示的是文档类型。其中Excel2007生成的文件为.xlsx后缀,Excel5为.xls后缀。

7. 向浏览器输出一个文件并添加上输出的内容

1
2
3
4
5
6
7
header('Content-Type: application/vnd.ms-excel');
//指定为:Excel2005的格式输出
header('Content-Disposition: attachment;filename = "01simple.xls"');
//指定文件名
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
//将内容添加到文件中并输出文件

8. 同上,只是这是以Excel2007的格式输出

1
2
3
4
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename = "01simple.xlsx"');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

9. 设置默认字体和大小

1
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial')->setSize(10);

10. 在Excel表中格式化添加时间

1
2
3
4
5
6
7
8
9
10
//年月日
$dateTimeNow = time();
$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Date/Time')->setCellValue('B9', 'Date')->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objPHPExcel->getActiveSheet()->getStyle('C9')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
//时分秒
$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Date/Time')->setCellValue('B10', 'Time')->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
//年月日,时分秒
$objPHPExcel->getActiveSheet()->setCellValue('A11', 'Date/Time')->setCellValue('B11', 'Date and Time')->setCellValue('C11', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objPHPExcel->getActiveSheet()->getStyle('C11')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);

在Excel表中格式化添加时间示意图

解析:getActiveSheet()表示为选中这张活动表,getStyle('C11')表示选中这张活动表的“C11”单元格,并准备修改其样式。getNumberFormat()表示得到数字的格式化类。

11. 添加文字,可以设置样式

1
2
3
4
5
6
7
8
9
10
11
12
$objRichText = new PHPExcel_RichText();
$objRichText->createText('你好 ');
$objPayable = $objRichText->createTextRun('你 好 吗?');
$objPayable->getFont()->setBold(true);
//设置“你好吗”变粗
$objPayable->getFont()->setItalic(true);
//设置“你好吗”为斜体
$objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
//设置“你好吗”颜色
$objRichText->createText(', unless specified otherwise on the invoice.');
$objPHPExcel->getActiveSheet()->setCellValue('A13', 'Rich Text')->setCellValue('C13', $objRichText);
//将拼接好的文字添加到工作表中

添加文字示意图

解析:createText('你好 ')只具有拼接语句的作用,并不能将内容添加到excel中,$objPayable = $objRichText->createTextRun('你 好 吗?');$objPayable类似于选择器的作用,createTextRun与createText作用相同并具有选择器的作用,当然以后再用只需要使用$objPayable即可。getFont表示得到这个字段要对其样式进行修改。到这里我们可以发现getStyle是在已添加的单元格内修改样式,getFont则是在未添加单元格内的字体作样式的设置。注意,在拼接语句时如果需要换行可以在字符串后增加“\n”转义字符。

12. 这里会总结目前为止的向单元格内添加文字方法

1
getCell("C14")->setValue($objRichText2);

解析:首先getCell(“C14”)取到“C14单元格”,然后利用setValue($str)添加单元格中的内容。

1
getStyle("C14")->getAlignment()->setWrapText(true);

解析:设置自动换行。

13. 设置单元格大小自适应

1
getColumnDimension('C')->setAutoSize(true);

14. 涉及到单元格需要计算的地方

1
2
3
$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Average of both ranges:');
$objPHPExcel->getActiveSheet()->setCellValue('B10', ' = AVERAGE(B2:C4)');
echo date('H:i:s') , " Average value of both Ranges is " , $objPHPExcel->getActiveSheet()->getCell('B10')->getCalculatedValue() , EOL;

解析:首先需要使用setCellValue('B10', '=AVERAGE(B2:C4)');注意有Excel函数,然后还需要在紧接着取得单元格并使用getCalculatedValue()进行计算过程。

15. 打印:设置页眉和页脚,只有打印出来才能看见效果

1
2
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&G&C&HPlease treat this document as confidential!');
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');

解析:首先需要利用:getHeaderFooter()得到页眉页脚,再利用setOddHeader或setOddFooter设置页眉页脚内容。

打印:设置页眉和页脚,只有打印出来才能看见效果示意图

16. 打印:向页眉中添加图片

1
2
3
4
5
6
// Add a drawing to the header
$objDrawing = new PHPExcel_Worksheet_HeaderFooterDrawing();
$objDrawing->setName('PHPExcel logo');
$objDrawing->setPath('./images/phpexcel_logo.gif');
$objDrawing->setHeight(36);
$objPHPExcel->getActiveSheet()->getHeaderFooter()->addImage($objDrawing, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT);

17. 打印:设置打印方向和纸张大小

1
2
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);

18. 利用for循环向单元格内添加内容

1
2
3
4
5
6
for ($i = 1;
$i < 200;
$i++) {
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $i);
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, 'Test value');
}

19. 设置单元格的高,宽,距离和边框

1
2
3
4
$objPHPExcel->getActiveSheet()->getComment('E13')->setWidth('100pt');
$objPHPExcel->getActiveSheet()->getComment('E13')->setHeight('100pt');
$objPHPExcel->getActiveSheet()->getComment('E13')->setMarginLeft('150pt');
$objPHPExcel->getActiveSheet()->getComment('E13')->getFillColor()->setRGB('EEEEEE');

20. 合并单元格,拆分单元格

1
2
3
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
$objPHPExcel->getActiveSheet()->mergeCells('A28:B28');
// Just to test... $objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');

后续内容待补充。


本文早期发布于个人 CSDN 博客:查看原文

站内搜索

没有找到内容!