当前位置: 首页 > 后端技术 > PHP

使用PHPExcel读写excel

时间:2023-03-30 03:58:27 PHP

转载请注明文章出处:https://tlanyan.me/use-phpexc...PHPOffice出品的PHPExcel是PHP读写Excel的优秀工具。本文参考官方文档对PHPExcel进行简单总结,希望对使用PHPExcel操作Excel的同仁有所帮助。PHPExcel简介PHPExcel是一个用PHP实现的用于读写电子表格文档的库。支持的文档类型包括:Excel(.xls)后缀、Excel2007(.xlsx后缀)、CSV(.csv后缀)、LibreOfficeCalc(.ods后缀)、PDF、HTML等格式(部分格式只能读取).PHPExcel运行环境为PHP5.2+,需要启用php_zip、php_xml和php_gd2扩展。细心的读者可能会看到PHPOffice还有另外一个作品:PHPSpreadsheet。PHPSpreadsheet也是一个Excel读写类库。与PHPExcel的主要区别在于:PHPSpreadsheet是PHPExcel的重构版本,是根据PHP的新特性改写而成。PHPSpreadsheet需要PHP5.6+,使用命名空间,PSR2编码标准,PHP语言最新的新特性;加强了对PHP版本的要求。PHP官方版本支持结束后,PHPSpreadsheet最多支持6个月的版本(意思是PHP5.5及以下肯定不支持,PHP5.6支持即将结束)。相比之下,PHPExcel仍然支持PHP5.2.0;开发组已将所有资源转移至PHPSpreadsheet,PHPExcel已停止维护。PHPSpreadsheet已经发布了稳定版1.0.0,官方不再推荐使用PHPExcel。本文内容主要讲解PHPExcel,掌握透后转PHPSpreadsheet也非常容易。PHPExcel体系结构要了解PHPExcel的体系结构,可以从了解Excel文件的结构开始。一个Excel文件包含多个工作表,每个工作表包含多个单元格;可以为文件、工作表和单元格单独设置属性。这些概念对应PHPExcel中的类,关系如下:PHPExcel类<->Excel文件PHPExcel_Worksheet类<->表单PHPExcel_Cell<->单元PHPExcel_DocumentProperties<->文件属性PHPExcel_Style_*<->格式设置类下面下面开始介绍PHPExcel操作的常用用法。使用PHPExcel根据上面介绍的关系,分为excel文件、表格、单元、格式设置四个部分来介绍PHPExcel的使用。excel文件PHPExcel类的一个实例表示一个excel文件。新生成的PHPExcel对象往往需要保存为文件;否则,excel文件通常需要作为PHPExcel实例导入。保存和导入的行为分别由作者和读者负责。为了正确导入和保存数据,读写器需要知道具体的文件格式。PHPExcel提供工厂类PHPExcel_IOFactory来简化读写器的创建。读写文件示例代码如下://读取文件,自动检测文件格式$excel=PHPExcel_IOFactory::load("./foo.xlsx");//新建excel文件并保存作为Excel2007格式$excel2=newPHPExcel();$writer=PHPExcel_IOFactory::createWriter($excel2,"Excel2007");$writer->save("./foo2.xlsx");如果知道具体的格式,可以使用具体的类操作://readFile$reader=PHPExcel_Reader_Excel2007();$excel=$reader->load("./foo1.xlsx");//写入文件$writer=PHPExcel_Writer_Excel2007($excel);$writer->save("./foo2.xlsx");可用的reader和writer类可以参考下图:推荐使用工厂方法读取文件,可以自动检测文件格式并加载。这在读取用户上传的不同格式的文件时很有用,避免格式不匹配后缀可能导致的错误。注意不要将PHPExcel与编写器/读取器对象混淆:PHPExcel保存数据,而编写器和读取器是序列化和反序列化它的辅助类。工作表操作一个excel文件可以包含多个工作表,常用的操作有读取、创建、复制、删除工作表。表单属于excel文件,一般需要挂载到特定的PHPExcel对象上。获取表单的方式有很多种,比如获取当前表单、获取指定订单表单、通过名称获取表单等。下面是示例代码:$sheet=$excel->getActiveSheet();//获取第二个sheet,从0开始编号$sheet=$excel->getSheet(1);$sheet=$excel->getSheetByName("工作表1");创建表单可以分为直接创建excel文件对象,也可以先创建一个表单实例,以后再关联。对应的方法是:$excel->createSheet();$sheet=newPHPExcel_Worksheet($excel,"sheet1");//其他一些操作//以第二种形式插入到文档中$excel->addSheet($工作表,1);PHPExcel还支持复制工作表(包括复制其他PHPExcel对象中的工作表)://复制工作表$sheet=clone$excel->getSheet(0);$sheet->setTitle("newsheet");$excel->addSheet($sheet,1);//$excel->addExternalSheet可以添加其他文件的工作表删除工作表的API比较简单,只提供了`removeSheetByIndex`方法://删除最后一个工作表$index=$excel->getSheetCount()-1;$excel->removeSheetByIndex($index);//删除当前工作表$index=$excel->getIndex($excel->getActiveSheet());$excel->removeSheetByIndex($index);单元操作单元是内容的主体,对其的操作比较复杂,大部分的类和API都与单元相关。单位属于特定的表单,并且与使用中的表单类交互最多。常见的操作包括定位、赋值/赋值、格式化等。下面是一些代码示例://获取单元格对象$cell=$sheet->getCell("B1");$cell=$sheet->getCellByColumnAndRow(1,1);//获取值$value=$cell->getValue();$value=$cell->getCalculatedValue();//获取计算值$style=$cell->getStyle();//获取格式对象$isMerged=$cell->isMergeRangeValueCell();//是否为合并单元的主单元(合并单元左上角单元)//设置值$sheet->setCellValue("B1","TEST");$sheet->setCellValueByColumnAndRow(1,1,"TEST");//批量赋值$data=[[2009,2010,2011,2012],['Q1',12,15,21],['Q2',56,73,86],['Q3',52,61,69],['Q4',30,32,0],];$sheet->fromArray($data);$cell->setValue("foo");//显示assignment$cell->setValueExplicit("123456788900",PHPExcel_Cell_DataType::TYPE_STRING);//合并单元格$sheet->mergeCells('A18:E22');//设置格式//设置字体为红色$cell->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);//设置边框$cell->getStyle()->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);文件属性设置excel文件文档属性,包括常用作者、标题、创建时间、描述等。该函数负责PHPExcel中DocumentProperties类型的成员变量:$property=$excel->getProperties();$property->setCreator("tlanyan");$property->setTitle("演示工作簿");$property->setKeywords("tlanyan,PHPExcel");其他上面提到的常用概念和操作,实际中可能用到的概念还包括:缓存和性能图像、图表、超链接、日期、货币等富文本格式和本地化公式设置打印属性设置内容、页边距设置等文件密码安全设置对于这些冷门或高级功能,请参考API文档。PHPExcel官方文档可能有点复杂,网上的二手资料往往缺乏深度。要用好PHPExcel,基本功之一就是搞清楚操作的对象,以及与其他类/对象的关系(这也是面向对象编程的基本功)。本文提到的PHPExcel->PHPExcel_WorkSheet->PHPExcel_Cell继承体系是使用过程中操作频率最高的对象。希望以上的描述和例子能够加深读者对PHPExcel类库的理解。参考https://github.com/PHPOffice/...