除了上述Mark Baker 的回答之外,新的 PhpSpreadsheet 库的使用方式在架构和语法上都有很多变化。
首先,请注意,其中包含一个迁移工具,可以为您执行许多 PhpExcel 到 PhpSpreadsheet 的语法更改。
变更的非详尽摘要:
(1) 最重要的变化:PhpSpreadsheet 依赖于安装的Composer。
受到 node 的 npm 和 ruby 的 bundler 的强烈启发,Composer 不是一个与 Yum 或 Apt 相同的包管理器。虽然它确实处理“包”和/或库,但它是一个更纯粹的依赖管理器,因为它管理每个项目的依赖关系,将它们安装在项目内的目录(通常名为“供应商”)中。默认情况下,它不会全局安装任何东西。(但是,为了方便起见,它确实通过 global 命令支持“全局”项目。)
可以在没有 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';
(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) Dropped 有条件返回的单元格...不再可以更改返回值的类型。它总是返回工作表,而不是单元格或规则,在方法中,例如:Worksheet::setCellValue()
、Worksheet::setCellValueExplicit()
等。例如:
$cell = $worksheet->setCellValue('A1', 'value', true); <==== PhpExcel
$cell = $worksheet->getCell('A1')->setValue('value'); <==== PhpSpreadsheet
有关这些更改的更多详细信息,请参阅下面的源文档。
参考:
PhpSpreadsheet 文档 - 从 PhpExcel 迁移- readthedocs.io
渥太华的 Rob Gravelle从 PhpExcel 切换到 PhpSpreadsheet