PHPExcel - 为什么 setTitle 如此耗时
PHPExcel - Why is setTitle so time-consuming
我正在创建一个 Excel-file/workbook 并使用 PHPExcel 计算工资。每个员工的计算都在单独的工作表中完成。
重命名工作表很好,但是太费时间了!
通过在代码中添加微秒时间戳,我发现测试服务器花费了 40-50 秒 (!)运行 这一行 150 次:
$objPHPExcel->getActiveSheet()->setTitle($name);
因此,当在网络服务器上进行计算时,服务器 "gives up" 并在完成工作簿之前给出 503 消息....
我已经尝试使用最新版本的 PHPExcel,但没有任何改进。有没有人有更好的重命名工作表的解决方案?
提前致谢!
这可能不是好的做法,但是在 PHPExcel 的 Worksheet.php(第 870-878 行)的函数 setTitle 中注释掉这一部分:
if ($this->parent && $this->parent->getCalculationEngine()) {
// New title
$newTitle = $this->getTitle();
$this->parent->getCalculationEngine()
->renameCalculationCacheForWorksheet($oldTitle, $newTitle);
if ($updateFormulaCellReferences) {
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->parent, $oldTitle, $newTitle);
}
}
进行了 150 次 setTitle 操作,从 45 秒变为 0.03,我看不出结果有什么不同。
我知道这个问题已有 4 个月了,但我必须解决在电子表格中导出数据时 PHPExcel 超时的问题,我发现,除非被覆盖,否则 setTitle()
将调用 PHPExcel_ReferenceHelper::updateNamedFormulas()
],然后扫描工作表中的每个单元格以查看它是否是 PHPExcel_Cell_DataType::TYPE_FORMULA
类型的单元格。这意味着如果您遍历工作表并为每个工作表设置标题,它将扫描不断增加的文档中的公式单元格。
这种情况下的解决方案是确保将 false
作为 setTitle()
.
的第二个参数传递
即
$foo->setTitle( 'foo title', false );
在此处查看方法的定义以获取更多信息:https://github.com/PHPOffice/PHPExcel/blob/1.8/Classes/PHPExcel/Worksheet.php
我正在创建一个 Excel-file/workbook 并使用 PHPExcel 计算工资。每个员工的计算都在单独的工作表中完成。
重命名工作表很好,但是太费时间了!
通过在代码中添加微秒时间戳,我发现测试服务器花费了 40-50 秒 (!)运行 这一行 150 次:
$objPHPExcel->getActiveSheet()->setTitle($name);
因此,当在网络服务器上进行计算时,服务器 "gives up" 并在完成工作簿之前给出 503 消息....
我已经尝试使用最新版本的 PHPExcel,但没有任何改进。有没有人有更好的重命名工作表的解决方案?
提前致谢!
这可能不是好的做法,但是在 PHPExcel 的 Worksheet.php(第 870-878 行)的函数 setTitle 中注释掉这一部分:
if ($this->parent && $this->parent->getCalculationEngine()) {
// New title
$newTitle = $this->getTitle();
$this->parent->getCalculationEngine()
->renameCalculationCacheForWorksheet($oldTitle, $newTitle);
if ($updateFormulaCellReferences) {
PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->parent, $oldTitle, $newTitle);
}
}
进行了 150 次 setTitle 操作,从 45 秒变为 0.03,我看不出结果有什么不同。
我知道这个问题已有 4 个月了,但我必须解决在电子表格中导出数据时 PHPExcel 超时的问题,我发现,除非被覆盖,否则 setTitle()
将调用 PHPExcel_ReferenceHelper::updateNamedFormulas()
],然后扫描工作表中的每个单元格以查看它是否是 PHPExcel_Cell_DataType::TYPE_FORMULA
类型的单元格。这意味着如果您遍历工作表并为每个工作表设置标题,它将扫描不断增加的文档中的公式单元格。
这种情况下的解决方案是确保将 false
作为 setTitle()
.
即
$foo->setTitle( 'foo title', false );
在此处查看方法的定义以获取更多信息:https://github.com/PHPOffice/PHPExcel/blob/1.8/Classes/PHPExcel/Worksheet.php