sim*_*eco 18 php phpexcel phpoffice phpspreadsheet
在PHPOffice的项目中,有两个与电子表格文件格式相关的项目:
PHPExcel是一个用纯PHP编写的库,它提供了一组类,允许您写入和读取不同的电子表格文件格式,如Excel(BIFF).xls,Excel 2007(OfficeOpenXML).xlsx,CSV,Libre/OpenOffice Calc .ods,Gnumeric,PDF,HTML,...这个项目是围绕微软的OpenXML标准和PHP构建的.
和
PhpSpreadsheet是一个用纯PHP编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式,如Excel和LibreOffice Calc.
它们之间的主要区别是什么?
Mar*_*ker 29
PHPExcel已被维护为一个用于处理电子表格文件多年的库,并且因为保留对旧版PHP(> = 5.2)的支持而受到束缚,这使得前进和改进非常困难.它是一个稳定的库,但不会再进一步开发.
PHPSpreadsheet是PHPExcel的最新版本,其中大部分内容已经过重写,以利用PHP的新功能.在保留PHPExcel的所有功能的同时,它需要5.5的最低PHP版本(很快就会被删除以至少需要5.6).
库名称的更改是为了反映它不仅限于Excel电子表格; 但支持更广泛的电子表格文件格式.
除了上述Mark Baker的答案,新的PhpSpreadsheet库的使用方式在体系结构和语法上都进行了许多更改。
首先,请注意,其中包含一个迁移工具,可以 为您执行许多从PhpExcel到PhpSpreadsheet的 语法更改。
(1)最重要的更改:PhpSpreadsheet依赖于Composer的安装。
受Node的npm和ruby的bundler的强烈启发,Composer不是与Yum或Apt相同的软件包管理器。尽管它确实处理“包”和/或库,但它是一个更纯粹的依赖项管理器,因为它基于每个项目管理依赖项,并将它们安装在项目内部的目录(通常称为“供应商”)中。默认情况下,它不会全局安装任何内容。(不过,为了方便起见,它确实通过全局命令支持“全局”项目。)
可以在不使用Composer的情况下使用PhpSpreadsheet,这是有关如何实现的一些想法。这是有关同一主题的专家们提出的更多想法。
FWIW,我用我的虚拟主机打开了一张票,并在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';
Run Code Online (Sandbox Code Playgroud)
(3)改名读者和作家
(4)读取器/写入器的短名称已明显更改。例如:
'Excel2003XML' ==> 'Xml' *the leading capital letter is mandatory !*
'Excel2007' ==> 'Xlsx'
'Excel5' ==> 'Xls'
'HTML' ==> 'Html'
'CSV' ==> 'Csv' etc.
Run Code Online (Sandbox Code Playgroud)
您是否注意到第一个字母大写?需要。
(5)简化了IOFactory方法:
PHPExcel_IOFactory::getSearchLocations() ==> replaced by ==> IOFactory::registerReader()
PHPExcel_IOFactory::setSearchLocations() ==> replaced by ==> IOFactory::registerWriter()
PHPExcel_IOFactory::addSearchLocation()
Run Code Online (Sandbox Code Playgroud)
例如,
\PHPExcel_IOFactory::addSearchLocation($type, $location, $classname); <=== PhpExcel
\PhpOffice\PhpSpreadsheet\IOFactory::registerReader($type, $classname); <=== PhpSpreadsheet
Run Code Online (Sandbox Code Playgroud)
(6)其他变更/不推荐使用:
Worksheet::duplicateStyleArray()
DataType::dataTypeForValue()
Conditional::get/setCondition()
Worksheet::get/setDefaultStyle()
Worksheet::get/setSelectedCell()
Writer\Xls::setTempDir() <==== functionality dropped
Run Code Online (Sandbox Code Playgroud)
(7)类PHPExcel_Autoloader被完全删除,并由作曲家自动加载机制代替。
(8)必须通过Composer安装PDF库。该PHPExcel_Settings::get/setPdfRenderer()方法是删除,并通过IOFactory :: registerWriter(),而不是替代。
(9)为HTML或PDF输出绘制图表时,该过程也得到了简化。并且,尽管仍然提供JpGraph支持,但遗憾的是它不是最新的PHP版本的最新内容,并且会生成各种警告。
(10)为了更完整和现代的PHP扩展ZipArchive,不再支持PclZip。对这些类进行了许多更改。
(11)单元缓存被大量重构以利用PSR-16。这意味着大多数与该功能相关的类均已删除。
(12)用于样式的数组键已经过标准化,以获得更连贯的体验。现在,它使用与getter和setter相同的措辞和大小写
(13)将操纵坐标的PHPExcel_Cell方法提取到一个专用的新类中\PhpOffice\PhpSpreadsheet\Cell\Coordinate。这些方法包括:
absoluteCoordinate()
absoluteReference()
columnIndexFromString()
coordinateFromString()
buildRange()
... and half-a-dozen more ...
Run Code Online (Sandbox Code Playgroud)
(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
Run Code Online (Sandbox Code Playgroud)
有关这些更改的更多详细信息,请参阅下面的源文档。
PhpSpreadsheet文档-从PhpExcel迁移 -readthedocs.io
渥太华的Rob Gravelle 从PhpExcel切换到PhpSpreadsheet