转载请注明文章出处: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`方法:
