PHPExcel 和 PhpSpreadsheet 之间的主要区别是啥?
Posted
技术标签:
【中文标题】PHPExcel 和 PhpSpreadsheet 之间的主要区别是啥?【英文标题】:What are the main differences between PHPExcel and PhpSpreadsheet?PHPExcel 和 PhpSpreadsheet 之间的主要区别是什么? 【发布时间】:2017-04-28 07:36:34 【问题描述】:phpOffice 的项目中有两个与电子表格文件格式相关的项目:
PHPExcel
PHPExcel 是一个用纯 PHP 编写的库,并提供一组类,允许您写入和读取不同的电子表格文件格式,如 Excel (BIFF) .xls、Excel 2007 (OfficeOpenXML) .xlsx、CSV、Libre /OpenOffice Calc .ods, Gnumeric, PDF, html, ... 这个项目是围绕微软的 OpenXML 标准和 PHP 构建的。
和
PhpSpreadsheets
PhpSpreadsheet 是一个用纯 PHP 编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式,例如 Excel 和 LibreOffice Calc。
它们之间的主要区别是什么?
【问题讨论】:
【参考方案1】:多年来,PHPExcel 一直作为处理电子表格文件的库进行维护,并且由于保留对旧版本 PHP (>= 5.2) 的支持而受到束缚,因此很难向前推进和改进它。这是一个稳定的库,但不会进一步开发。
PHPSpreadsheet 是 PHPExcel 的最新版本,它的大部分内容已被重写以利用 PHP 的新功能。在保留 PHPExcel 的所有功能的同时,它要求最低 PHP 版本为 5.5(很快该版本将降至最低 5.6)。
库名称的更改是为了反映它不仅限于 Excel 电子表格;但支持更广泛的电子表格文件格式。
2020 年编辑:
PHP Excel 于 2017 年正式弃用,并于 2019 年永久存档。
PHP Excel 多年未维护,不得再使用。 所有用户都必须迁移到其直接继承者 PhpSpreadsheet 或其他替代方案。
【讨论】:
很高兴知道 phpexcel 中的 1,0 列混淆不再在 phpspreadsheet 中找到! 所以@mark 如果我目前正在使用 phpexcel,并且现在想安装 phpspreadsheet(因为不再维护 phpexcel),我是否必须对我的项目进行任何更改? @natral - 对你来说可能有点晚了,但它可能对其他人有所帮助 - phpspreadsheet.readthedocs.io/en/develop/topics/… 有一个迁移指南@ 只是作为一个小评论,上面的迁移链接已经死了,现在已经死了。 @Chris Wheeler 这是迁移的新链接:phpspreadsheet.readthedocs.io/en/latest/topics/…【参考方案2】:除了上面的Mark Baker's 答案之外,还有许多关于如何使用新的 PhpSpreadsheet 库的架构和语法更改。
首先,请注意其中包含的迁移工具可以执行许多 PhpExcel 到 PhpSpreadsheet 你。
变更的非详尽摘要:
(1) 最重要的变化:PhpSpreadsheet 依赖于安装的Composer。
在 node 的 npm 和 ruby 的 bundler 的强烈启发下,Composer 不是一个与 Yum 或 Apt 相同的包管理器。虽然它确实处理“包”和/或库,但它是一个更纯粹的依赖管理器,因为它管理每个项目的依赖关系,将它们安装在项目内的目录(通常名为“供应商”)中。默认情况下,它不会全局安装任何东西。 (不过,为了方便起见,它确实通过 global 命令支持“全局”项目。)
可以在没有 Composer 的情况下使用 PhpSpreadsheet,这里是 some thoughts on how to do that。这是同一主题的more thoughts direct from the mavens。
FWIW,我打开了一张票 with my webhost 并在 10 分钟内收到回复说 Composer 已安装在我们的共享主机上(绿色计划,对于那些想知道的人)。并不是说你会有同样的好运,但也许轶事信息会有所帮助。值得一试您的虚拟主机。
(2) 引入了命名空间
PhpSpreadsheet 的代码方面也从 PhpExcel 开始发展。虽然 PhpExcel 的入口点类 - Classes/PHPExcel.php - 反映了它的同名,但 PhpSpreadsheet 在供应商目录的根目录中包含 autoload.php 文件。它还利用一些命名空间来简化编码:
<?php
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
require_once 'vendor/autoload.php';
(3) 读者和作者被重命名
(4) Reader/Writer 短名称发生了显着变化。例如:
'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 类被完全移除,取而代之的是 composer 自动加载机制。
(8) PDF 库必须通过 composer 安装。 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 开始的行和为列 A 返回 1 的 Excel 函数 COLUMN() 一致。
(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
【讨论】:
以上是关于PHPExcel 和 PhpSpreadsheet 之间的主要区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章
PHP7 学习笔记PHPExcel vs PhpSpreadsheet and PHP_XLSXWriter
PHPSpreadsheet - “PHPExcel_Worksheet_Drawing”在哪里