在PHPOffice项目中,有两个与电子表格文件格式相关的项目:
PHPExcel是一个用纯PHP编写的库,它提供了一组类,允许您写入和读取不同的电子表格文件格式,如Excel(BIFF).xls,Excel 2007(OfficeOpenXML).xlsx,CSV,Libre / OpenOffice Calc .ods,Gnumeric,PDF,HTML,...这个项目是围绕Microsoft的OpenXML标准和PHP构建的。
和
PhpSpreadsheet是一个用纯PHP编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式,如Excel和LibreOffice Calc。
它们之间的主要区别是什么?
答案 0 :(得分:22)
PHPExcel已被维护为用于处理电子表格文件多年的库,并且因为保留对旧版PHP(> = 5.2)的支持而受到束缚,因此很难向前推进并改进它。它是一个稳定的库,但不会再开发。
PHPSpreadsheet是PHPExcel的最新版本,其中大部分内容已经过重写,以利用PHP的新功能。在保留PHPExcel的所有功能的同时,它需要5.5的最低PHP版本(很快就会被删除以至少需要5.6)。
库名称的更改是为了反映它不仅限于Excel电子表格;但支持更广泛的电子表格文件格式。
答案 1 :(得分:5)
在上面的Mark Baker's回答之后,对如何使用新的PhpSpreadsheet库进行了许多体系结构和语法上的更改。
首先,请注意,其中包含一个迁移工具,该工具执行许多 PhpExcel -to- PhpSpreadsheet 你。
(1)最重要的更改:PhpSpreadsheet依赖于安装Composer。
Composer受到Node的npm和ruby捆绑器的强烈启发,并不是与Yum或Apt相同的软件包管理器。尽管它确实处理“包”和/或库,但它是一个更纯粹的依赖项管理器,因为它基于每个项目管理依赖项,并将它们安装在项目内部的目录(通常称为“供应商”)中。默认情况下,它不会全局安装任何内容。 (不过,为了方便起见,它确实通过全局命令支持“全局”项目。)
可以在不使用Composer的情况下使用PhpSpreadsheet,这是some thoughts on how to do that。这里是more thoughts direct from the mavens的同一主题。
FWIW,我打开了一张票证with my webhost,并在10分钟内收到答复,说Composer已安装在我们的共享主机上(绿色计划,对于那些好奇的人)。并不是说您会拥有同样的好运,但也许轶事信息会有所帮助。值得一试的虚拟主机。
(2)引入了命名空间
自PhpExcel以来,PhpSpreadsheet的代码方面也有所发展。 PhpExcel的入口点类-Classes / PHPExcel.php-反映了它的名字,而PhpSpreadsheet在供应商目录的根目录中包含autoload.php文件。它还利用一些名称空间来简化编码:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
require_once 'vendor/autoload.php';
(3)读者和作家已重命名
(4)显着更改了读取器/写入器的简称。例如:
'Excel2003XML' ==> 'Xml' *the leading capital letter is mandatory !*
'Excel2007' ==> 'Xlsx'
'Excel5' ==> 'Xls'
'HTML' ==> 'Html'
'CSV' ==> 'Csv' etc.
您是否注意到第一个字母大写?必需。
(5)简化了IOFactory方法:
PHPExcel_IOFactory::getSearchLocations() ==> replaced by ==> IOFactory::registerReader()
PHPExcel_IOFactory::setSearchLocations() ==> replaced by ==> IOFactory::registerWriter()
PHPExcel_IOFactory::addSearchLocation()
例如,
\PHPExcel_IOFactory::addSearchLocation($type, $location, $classname); <=== PhpExcel
\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname); <=== PhpSpreadsheet
(6)其他更改/弃用:
Worksheet::duplicateStyleArray()
DataType::dataTypeForValue()
Conditional::get/setCondition()
Worksheet::get/setDefaultStyle()
Worksheet::get/setSelectedCell()
Writer\Xls::setTempDir() <==== functionality dropped
(7)类PHPExcel_Autoloader已被完全删除,并由作曲家自动加载机制取代。
(8)必须通过composer安装PDF库。 PHPExcel_Settings::get/setPdfRenderer()
方法已删除,并由IOFactory :: registerWriter()代替。
(9)呈现HTML或PDF输出的图表时,该过程也得到了简化。而且,尽管JpGraph支持仍然可用,但遗憾的是它不是最新的PHP版本,并且会生成各种警告。
(10)放弃了对PclZip的支持,而倾向于更完整和现代的PHP扩展ZipArchive。这些类有太多更改。
(11)大量重构了单元缓存以利用PSR-16。这意味着大多数与该功能相关的类都已删除。
(12)用于样式的数组键已经过标准化,以获得更连贯的体验。现在,它使用与getter和setter相同的措辞和大小写
(13)将操纵PHPExcel_Cell
中坐标的方法提取到专用的新类\PhpOffice\PhpSpreadsheet\Cell\Coordinate
中。这些方法包括:
absoluteCoordinate()
absoluteReference()
columnIndexFromString()
coordinateFromString()
buildRange()
... and half-a-dozen more ...
(14)列索引现在基于1。因此,列A为索引1。这与从1开始的行和Excel函数COLUMN()为列A返回1一致。
(15)在没有意义的情况下,许多方法的默认值都被删除。通常,setter方法不应具有默认值。
(16)删除有条件返回的单元格...不再可能更改返回值的类型。它总是以Worksheet::setCellValue()
,Worksheet::setCellValueExplicit()
等方法返回工作表,而不返回单元格或规则。例如:
$cell = $worksheet->setCellValue('A1', 'value', true); <==== PhpExcel
$cell = $worksheet->getCell('A1')->setValue('value'); <==== PhpSpreadsheet
有关这些更改的更多详细信息,请参阅下面的源文档。
PhpSpreadsheet Docs - Migration From PhpExcel-readthedocs.io
Making the switch from PhpExcel to PhpSpreadsheet,来自渥太华的Rob Gravelle