【问题标题】:phpspreadsheet setFormatCode performance issuephpspreadsheet setFormatCode 性能问题
【发布时间】:2021-05-18 17:06:55
【问题描述】:

我们检测到一些较大的导出变得非常缓慢的情况,因此我们尝试分析该问题。我们谈论的是导出 - 仅作为示例 - 大约 600 列 x 6000 行。

旁注:我们使用 CakePHP 并有一个 ExportHelper,它在内部使用一个电子表格实例并将活动工作表绑定到一个内部属性以便更快地参考。有一个添加整行的函数,但在函数内部,每个单元格及其样式都是单独添加的。

在给定的情况下,我们不会在颜色、边框、字体样式等方面添加公式或视觉样式。也没有组合单元格。

但我们需要对某些列的单元格应用数字格式。如果我们注释掉应用样式的代码,例如

$this->_xlsWorksheet->getStyleByColumnAndRow($c, $r)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_PERCENTAGE_00);
                        

...然后导出只需几秒钟。但是如果我们把代码留在里面,导出要么需要几分钟,要么会因为内存问题而崩溃。开启缓存似乎没有帮助。

所以我想知道:有什么办法可以加快这些与单元格格式相关的调用?我们是否应该先写入所有单元格内容,并且仅在最后将样式应用于完整列,这意味着:从第二行到最后一行的单元格范围(不包括包含标题的第一行),而不是应用通过单独调用为单元格设置样式?

【问题讨论】:

    标签: excel phpspreadsheet


    【解决方案1】:

    如果您的解决方案无需格式化即可正常工作,您可以在创建 XML 文件之前修改数据。

    如果您需要导出这么多数据,也许 CSV 文件是最佳选择。无论如何,MS Excel 会因如此大的文件而崩溃。哈哈。

    【讨论】:

    • 我们在我们的软件中提供了另一种 CSV 导出,这是一个可行的选择。然后在 Excel 中打开这样的 CSV 工作正常,所以我不认为大小本身(关于列和行的乘积)是一个问题。需要格式化,因为否则会将数值视为字符串,从而导致各种缺点(页脚中没有选定单元格范围的总和等)
    猜你喜欢
    • 2018-06-01
    • 2023-03-10
    • 2022-10-25
    • 2017-04-13
    • 2022-01-04
    • 2010-09-05
    • 2012-09-25
    • 2015-05-28
    相关资源
    最近更新 更多