欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHPExcel最简单的实例教程

程序员文章站 2022-06-14 11:11:38
...
PHPExcel 是相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择。不过其使用方法相对来说也就有些繁琐。列举以记之。

PHP代码

  1. //设置PHPExcel类库的include path
  2. set_include_path( '.' . PATH_SEPARATOR .
  3. 'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR .
  4. get_include_path());
  5. /**
  6. * 打开对应行的注释。
  7. * 如果使用 Excel5 ,输出的内容应该是GBK编码。
  8. */
  9. require_once 'PHPExcel.php' ;
  10. // uncomment
  11. // or
  12. // 创建一个处理对象实例
  13. $objExcel = new PHPExcel();
  14. // 创建文件格式写入对象实例, uncomment
  15. // or
  16. //$objWriter->setOffice2003Compatibility(true);
  17. //*************************************
  18. //设置文档基本属性
  19. $objProps = $objExcel ->getProperties();
  20. $objProps ->setCreator( "Zeal Li" );
  21. $objProps ->setLastModifiedBy( "Zeal Li" );
  22. $objProps ->setTitle( "Office XLS Test Document" );
  23. $objProps ->setSubject( "Office XLS Test Document, Demo" );
  24. $objProps ->setDescription( "Test document, generated by PHPExcel." );
  25. $objProps ->setKeywords( "office excel PHPExcel" );
  26. $objProps ->setCategory( "Test" );
  27. //*************************************
  28. //设置当前的sheet索引,用于后续的内容操作。
  29. //一般只有在使用多个sheet的时候才需要显示调用。
  30. //缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
  31. $objExcel ->setActiveSheetIndex(0);
  32. $objActSheet = $objExcel ->getActiveSheet();
  33. //设置当前活动sheet的名称
  34. $objActSheet ->setTitle( '测试Sheet' );
  35. //*************************************
  36. //设置单元格内容
  37. //
  38. //由PHPExcel根据传入内容自动判断单元格内容类型
  39. $objActSheet ->setCellValue( 'A1' , '字符串内容' ); // 字符串内容
  40. $objActSheet ->setCellValue( 'A2' , 26); // 数值
  41. $objActSheet ->setCellValue( 'A3' , true); // 布尔值
  42. $objActSheet ->setCellValue( 'A4' , '=SUM(A2:A2)' ); // 公式
  43. //显式指定内容类型
  44. $objActSheet ->setCellValueExplicit( 'A5' , '847475847857487584' ,
  45. PHPExcel_Cell_DataType::TYPE_STRING);
  46. //合并单元格
  47. $objActSheet ->mergeCells( 'B1:C22' );
  48. //分离单元格
  49. $objActSheet ->unmergeCells( 'B1:C22' );
  50. //*************************************
  51. //设置单元格样式
  52. //
  53. //设置宽度
  54. $objActSheet ->getColumnDimension( 'B' )->setAutoSize(true);
  55. $objActSheet ->getColumnDimension( 'A' )->setWidth(30);
  56. $objStyleA5 = $objActSheet ->getStyle( 'A5' );
  57. //设置单元格内容的数字格式。
  58. //
  59. //如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,
  60. //各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode
  61. //为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要
  62. //行代码:
  63. //if($ifmt === '0') $ifmt = 1;
  64. //
  65. //都按原始内容全部显示出来。
  66. $objStyleA5
  67. ->getNumberFormat()
  68. ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
  69. //设置字体
  70. $objFontA5 = $objStyleA5 ->getFont();
  71. $objFontA5 ->setName( 'Courier New' );
  72. $objFontA5 ->setSize(10);
  73. $objFontA5 ->setBold(true);
  74. $objFontA5 ->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
  75. $objFontA5 ->getColor()->setARGB( 'FF999999' );
  76. //设置对齐方式
  77. $objAlignA5 = $objStyleA5 ->getAlignment();
  78. $objAlignA5 ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
  79. $objAlignA5 ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
  80. //设置边框
  81. $objBorderA5 = $objStyleA5 ->getBorders();
  82. $objBorderA5 ->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  83. $objBorderA5 ->getTop()->getColor()->setARGB( 'FFFF0000' ); // color
  84. $objBorderA5 ->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  85. $objBorderA5 ->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  86. $objBorderA5 ->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  87. //设置填充颜色
  88. $objFillA5 = $objStyleA5 ->getFill();
  89. $objFillA5 ->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
  90. $objFillA5 ->getStartColor()->setARGB( 'FFEEEEEE' );
  91. //从指定的单元格复制样式信息.
  92. $objActSheet ->duplicateStyle( $objStyleA5 , 'B1:C22' );
  93. //*************************************
  94. //添加图片
  95. $objDrawing = new PHPExcel_Worksheet_Drawing();
  96. $objDrawing ->setName( 'ZealImg' );
  97. $objDrawing ->setDescription( 'Image inserted by Zeal' );
  98. $objDrawing ->setPath( './zeali.net.logo.gif' );
  99. $objDrawing ->setHeight(36);
  100. $objDrawing ->setCoordinates( 'C23' );
  101. $objDrawing ->setOffsetX(10);
  102. $objDrawing ->setRotation(15);
  103. $objDrawing ->getShadow()->setVisible(true);
  104. $objDrawing ->getShadow()->setDirection(36);
  105. $objDrawing ->setWorksheet( $objActSheet );
  106. //添加一个新的worksheet
  107. $objExcel ->createSheet();
  108. $objExcel ->getSheet(1)->setTitle( '测试2' );
  109. //保护单元格
  110. $objExcel ->getSheet(1)->getProtection()->setSheet(true);
  111. $objExcel ->getSheet(1)->protectCells( 'A1:C22' , 'PHPExcel' );
  112. //*************************************
  113. //输出内容
  114. //
  115. $outputFileName = "output.xls" ;
  116. //到文件
  117. ////$objWriter->save($outputFileName);
  118. //or
  119. //到浏览器
  120. ////header("Content-Type: application/force-download");
  121. ////header("Content-Type: application/octet-stream");
  122. ////header("Content-Type: application/download");
  123. ////header("Content-Transfer-Encoding: binary");
  124. ////header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  125. ////header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  126. ////header("Pragma: no-cache");
  127. ////$objWriter->save('php://output');
  128. ?>

下面是PHPExcel读取Excel文件的例子:

PHP代码

  1. $fileName = 'excel.xls' ;
  2. $path = 'path' ;
  3. $filePath = $path . $fileName ;
  4. $PHPExcel = new PHPExcel();
  5. $PHPReader = new PHPExcel_Reader_Excel2007();
  6. if (! $PHPReader ->canRead( $filePath )){
  7. $PHPReader = new PHPExcel_Reader_Excel5();
  8. if (! $PHPReader ->canRead( $filePath )){
  9. echo 'no Excel' ;
  10. return ;
  11. }
  12. }
  13. $PHPExcel = $PHPReader ->load( $filePath );
  14. $currentSheet = $PHPExcel ->getSheet(0);
  15. /**取得一共有多少列*/
  16. $allColumn = $currentSheet ->getHighestColumn();
  17. /**取得一共有多少行*/
  18. $allRow = array ( $currentSheet ->getHighestRow());
  19. for ( $currentRow = 1; $currentRow
  20. for ( $currentColumn = 'A' ; $currentColumn
  21. $address = $currentColumn . $currentRow ;
  22. echo $currentSheet ->getCell( $address )->getValue(). "\t" ;
  23. }
  24. echo "\n" ;
  25. }