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”这条数据。
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' );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 );
解析: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 $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' );
后续内容待补充。
本文早期发布于个人 CSDN 博客:查看原文