PHPExcel:用于Excel等文档生成的PHP开源类库

来源:互联网 发布:淘宝免费送衣服是真的 编辑:程序博客网 时间:2024/05/22 08:00

PHPExcel是一个十分强大的文档生成PHP开源类库,它不仅支持生成Excel(.xls)、Excel2007(.xlsx)文档,同时也支持PDF、HTML、CSV文档的生成。此外,PHPExcel还支持以现有的Excel文档为模板填充数据生成新的以上文档。并且,其本身的API文档和示例demo相当完整,非常有助于开发人员使用。

 

PHPExcel的官方网站如下:

http://phpexcel.codeplex.com/

 

当前的版本是1.7.6,下载解压后的PHPExcel的目录结构如下所示:


其中:

Classes目录下是PHPExcel的源代码文件:PHPExcel.php文件是类库的接口,外部的PHP代码通过它来实现对PHPExcel的调用;PHPExcel目录下是各种不同文档(如Excel、Excel2007、PDF等)的读取和生成的具体操作代码,它们由Classes目录下的PHPExcel.php文件通过工厂模式统一进行调用。

Documentation目录下是PHPExcel的官方帮助文档,尤其是API目录下网页文件全部是PHPExcel的API帮助文档,而其它的则是对这个开源项目的介绍。

Tests目录下是PHPExcel的将近40个示例小程序,可以与Classes目录一同放到Apache+PHP环境下进行测试与学习。

 

下面是PHPExcel中一些常用的代码段:

[php] view plaincopy
  1. <?php  
  2. // 导入PHPExcel类库   
  3. require_once("Classes/PHPExcel.php");  
  4.   
  5. // 通常PHPExcel对象有两种实例化的方式   
  6. // 1. 通过new关键字创建空白文档   
  7. $phpexcel = new PHPExcel();  
  8.   
  9. // 2. 通过读取已有的模板创建   
  10. $phpexcel = PHPExcel_IOFactory::createReader("Excel5")->load("template.xls");  
  11.   
  12. /**  
  13.  * 实例化之后的PHPExcel对象类似于一个暂存于内存中文档文件,  
  14.  * 可以对它进行操作以达到修改文档数据的目的 
  15.  */  
  16. // 设置文档属性   
  17. $phpexcel->getProperties()->setCreator("Liu Jian"// 文档作者  
  18.                           ->setLastModifiedBy("Liu Jian"// 最后一次修改者  
  19.                           ->setTitle("Office 2003 XLS Test Document"// 标题  
  20.                           ->setSubject("Office 2003 XLS Test Document"// 主题  
  21.                           ->setDescription("Test document for Office 2003 XLS, generated using PHPExcel."// 备注  
  22.                           ->setKeywords("office 2003 openxml php"// 关键字  
  23.                           ->setCategory("Test result file"); // 类别  
  24.                             
  25. // 默认状态下,新创建的空白文档(通过new)只有一个工作表(sheet),且它的编号(index)为0  
  26. // 可以通过如下的方式添加新的工作表   
  27. $phpexcel->createSheet(1);  
  28.   
  29. // 获取已有编号的工作表   
  30. $sheet = $phpexcel->getSheet(1);  
  31.   
  32. // 设置当前激活的工作表编号   
  33. $phpexcel->setActiveSheetIndex(1);  
  34.   
  35. // 获取当前激活的工作表   
  36. $sheet = $phpexcel->getActiveSheet();  
  37.   
  38. // 得到工作表之后就可以操作它的单元格以修改数据了   
  39. // 修改工作表的名称   
  40. $sheet->setTitle("Test");  
  41.   
  42. // 设置单元格A5的值   
  43. $sheet->setCellValue("A5"date('Y-m-d h:i:s'));  
  44.   
  45. // 设置第3行第5列(E3)的值   
  46. $sheet->setCellValueByColumnAndRow(4, 3, date('Y-m-d h:i:s'));  
  47.   
  48. // 获取单元格A5的值   
  49. $sheet->getCell("A5")->getValue();  
  50.   
  51. // 合并单元格   
  52. $sheet->mergeCells("C3:G6");  
  53.   
  54. // 拆分合并的单元格   
  55. $sheet->unmergeCells("C3:G6");  
  56.   
  57. // 设置第3行的属性   
  58. $sheet->getRowDimension(3)->setRowHeight(100) // 行高  
  59.                           ->setVisible(true) // 是否可见,默认为true   
  60.                           ->setRowIndex(6) // 变更行号为6  
  61.                           ->setOutlineLevel(5); // 优先级别,默认为0,参数必须是0到7  
  62.   
  63. // 设置第F列的属性   
  64. // getColumnDimension("F")可以用getColumnDimensionByColumn(5)代替  
  65. $sheet->getColumnDimension("F")->setWidth(200) // 列宽  
  66.                                ->setColumnIndex("I"// 变更列号为I  
  67.                                ->setVisible(false) // 是否可见  
  68.                                ->setAutoSize(true); // 自动适应列宽  
  69.               
  70. // 在第3行前面插入1行,该行将变成新的第3行,其它的依次下移1行   
  71. $sheet->insertNewRowBefore(3, 1);  
  72.   
  73. // 在第C行前面插入1列,该列将变成新的第C列,其它的依次右移1列  
  74. $sheet->insertNewColumnBefore("C", 1); // 方法一  
  75. $sheet->insertNewColumnBeforeByIndex(2, 1); // 方法二,第C列又是第2列  
  76.   
  77. // 获取单元格D3的样式对象   
  78. $style = $sheet->getStyle("D3"); // 等价于getStyleByColumnAndRow(3, 3)  
  79.   
  80. // 设置该单元格的字体属性   
  81. $style->getFont()->setBold(true) // 是否粗体  
  82.                  ->setSize(16) // 字号   
  83.                  ->setName("Gungsuh"// 字体名,只适用于外文字体  
  84.                  ->setItalic(true) // 是否斜体  
  85.                  ->setStrikethrough(true) // 是否有删除线  
  86.                  ->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING) // 下划线类型  
  87.                  ->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); // 字体颜色  
  88.                    
  89. // 设置该单元格的背景填充属性   
  90. $style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID) // 填充模式  
  91.                  ->getStartColor()->setARGB(PHPExcel_Style_Color::COLOR_YELLOW); // 背景颜色  
  92.   
  93. // 设置该单元格中数字的格式   
  94. $style->getNumberFormat()->setFormatCode("0.00");  
  95.   
  96. // 设置该单元格中文本对齐方式   
  97. $style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER) // 水平方向  
  98.                       ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // 垂直方向  
  99.   
  100. $sheet->setCellValue("D3""12.3456");  
  101.   
  102. // 在本地保存文档   
  103. PHPExcel_IOFactory::createWriter($phpexcel'Excel5')->save("output.xls");  
  104.   
  105. // 输出文档到页面   
  106. header('Content-Type: application/vnd.ms-excel');  
  107. header('Content-Disposition: attachment;filename="test.xls"');  
  108. header('Cache-Control: max-age=0');  
  109. PHPExcel_IOFactory::createWriter($phpexcel'Excel5')->save('php://output');  
  110. ?>  
[php] view plain copy
  1. <?php  
  2. // 导入PHPExcel类库  
  3. require_once("Classes/PHPExcel.php");  
  4.   
  5. // 通常PHPExcel对象有两种实例化的方式  
  6. // 1. 通过new关键字创建空白文档  
  7. $phpexcel = new PHPExcel();  
  8.   
  9. // 2. 通过读取已有的模板创建  
  10. $phpexcel = PHPExcel_IOFactory::createReader("Excel5")->load("template.xls");  
  11.   
  12. /**  
  13.  * 实例化之后的PHPExcel对象类似于一个暂存于内存中文档文件,  
  14.  * 可以对它进行操作以达到修改文档数据的目的 
  15.  */  
  16. // 设置文档属性  
  17. $phpexcel->getProperties()->setCreator("Liu Jian"// 文档作者  
  18.                           ->setLastModifiedBy("Liu Jian"// 最后一次修改者  
  19.                           ->setTitle("Office 2003 XLS Test Document"// 标题  
  20.                           ->setSubject("Office 2003 XLS Test Document"// 主题  
  21.                           ->setDescription("Test document for Office 2003 XLS, generated using PHPExcel."// 备注  
  22.                           ->setKeywords("office 2003 openxml php"// 关键字  
  23.                           ->setCategory("Test result file"); // 类别  
  24.                             
  25. // 默认状态下,新创建的空白文档(通过new)只有一个工作表(sheet),且它的编号(index)为0  
  26. // 可以通过如下的方式添加新的工作表  
  27. $phpexcel->createSheet(1);  
  28.   
  29. // 获取已有编号的工作表  
  30. $sheet = $phpexcel->getSheet(1);  
  31.   
  32. // 设置当前激活的工作表编号  
  33. $phpexcel->setActiveSheetIndex(1);  
  34.   
  35. // 获取当前激活的工作表  
  36. $sheet = $phpexcel->getActiveSheet();  
  37.   
  38. // 得到工作表之后就可以操作它的单元格以修改数据了  
  39. // 修改工作表的名称  
  40. $sheet->setTitle("Test");  
  41.   
  42. // 设置单元格A5的值  
  43. $sheet->setCellValue("A5"date('Y-m-d h:i:s'));  
  44.   
  45. // 设置第3行第5列(E3)的值  
  46. $sheet->setCellValueByColumnAndRow(4, 3, date('Y-m-d h:i:s'));  
  47.   
  48. // 获取单元格A5的值  
  49. $sheet->getCell("A5")->getValue();  
  50.   
  51. // 合并单元格  
  52. $sheet->mergeCells("C3:G6");  
  53.   
  54. // 拆分合并的单元格  
  55. $sheet->unmergeCells("C3:G6");  
  56.   
  57. // 设置第3行的属性  
  58. $sheet->getRowDimension(3)->setRowHeight(100) // 行高  
  59.                           ->setVisible(true) // 是否可见,默认为true   
  60.                           ->setRowIndex(6) // 变更行号为6  
  61.                           ->setOutlineLevel(5); // 优先级别,默认为0,参数必须是0到7  
  62.   
  63. // 设置第F列的属性  
  64. // getColumnDimension("F")可以用getColumnDimensionByColumn(5)代替  
  65. $sheet->getColumnDimension("F")->setWidth(200) // 列宽  
  66.                                ->setColumnIndex("I"// 变更列号为I  
  67.                                ->setVisible(false) // 是否可见  
  68.                                ->setAutoSize(true); // 自动适应列宽  
  69.               
  70. // 在第3行前面插入1行,该行将变成新的第3行,其它的依次下移1行  
  71. $sheet->insertNewRowBefore(3, 1);  
  72.   
  73. // 在第C行前面插入1列,该列将变成新的第C列,其它的依次右移1列  
  74. $sheet->insertNewColumnBefore("C", 1); // 方法一  
  75. $sheet->insertNewColumnBeforeByIndex(2, 1); // 方法二,第C列又是第2列  
  76.   
  77. // 获取单元格D3的样式对象  
  78. $style = $sheet->getStyle("D3"); // 等价于getStyleByColumnAndRow(3, 3)  
  79.   
  80. // 设置该单元格的字体属性  
  81. $style->getFont()->setBold(true) // 是否粗体  
  82.                  ->setSize(16) // 字号  
  83.                  ->setName("Gungsuh"// 字体名,只适用于外文字体  
  84.                  ->setItalic(true) // 是否斜体  
  85.                  ->setStrikethrough(true) // 是否有删除线  
  86.                  ->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING) // 下划线类型  
  87.                  ->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLUE); // 字体颜色  
  88.                    
  89. // 设置该单元格的背景填充属性  
  90. $style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID) // 填充模式  
  91.                  ->getStartColor()->setARGB(PHPExcel_Style_Color::COLOR_YELLOW); // 背景颜色  
  92.   
  93. // 设置该单元格中数字的格式  
  94. $style->getNumberFormat()->setFormatCode("0.00");  
  95.   
  96. // 设置该单元格中文本对齐方式  
  97. $style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER) // 水平方向  
  98.                       ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // 垂直方向  
  99.   
  100. $sheet->setCellValue("D3""12.3456");  
  101.   
  102. // 在本地保存文档  
  103. PHPExcel_IOFactory::createWriter($phpexcel'Excel5')->save("output.xls");  
  104.   
  105. // 输出文档到页面  
  106. header('Content-Type: application/vnd.ms-excel');  
  107. header('Content-Disposition: attachment;filename="test.xls"');  
  108. header('Cache-Control: max-age=0');  
  109. PHPExcel_IOFactory::createWriter($phpexcel'Excel5')->save('php://output');  
  110. ?>  

需要注意的是:

1. PHPExcel本身具有在单元格中插入图片以及设置单元格边框的相关函数,但是个人感觉动态添加图片、设置边框远没有使用静态的excel模版来生成文档更好用。实在需要的情况下可以参见最后的参考资料。

2. 添加新的行或列时,新的行或列的样式(style)会自动与新行/列的前一行/列保持一致。

3. 设置单元格填充颜色时,必须先设定填充模式,否则会失效。

4. 通过PHPExcel_IOFactory的静态方法createReader或createWriter,必须传入文档格式所对应的参数字符串,其中:

  • Excel5对应Excel 2003(.xls)
  • Excel2007对应Excel 2007(.xlsx)
  • PDF对应PDF(.pdf)
  • CSV对应CSV(.csv)

输出文档时,文件的扩展名必须与该参数字符串相契合。


参考资料:http://apps.hi.baidu.com/share/detail/35261920

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信变成耳机模式怎么办 5s变成耳机模式怎么办 华为手机一直是耳机模式怎么办 华为手机进水了耳机模式怎么办 蓝牙耳机通话声音小怎么办 华为手机自动进入耳机模式怎么办 华为手机耳机怎么挂了电话怎么办 华为手机听筒声音小怎么办 华为p9手机听筒声音小怎么办 苹果6总是耳机模式怎么办 苹果没有插耳机模式怎么办 苹果手机切换耳机模式怎么办 苹果6s出现耳机模式怎么办 苹果6变成了耳机模式怎么办 苹果手机成耳机模式了怎么办 华为mate8耳机声音小怎么办 移动sim卡丢了怎么办 蓝牙耳机开不开机怎么办 苹果手机蓝牙不匹配怎么办 苹果6蓝牙坏了怎么办 蓝牙密钥不正确不匹配怎么办 华为p6开不了机怎么办 华为c199手机不停重启怎么办 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办 华为路由器掉线了怎么办 三星s6只识别一张卡怎么办 华为手机卡不显示了怎么办 华为账号手机卡丢了怎么办 荣耀8耗电量太快怎么办 vivo卡2不显示怎么办 电信宽带玩王者荣耀卡怎么办