【问题标题】:Why PHPExcel does not allow to write more than 5000 rows为什么 PHPExcel 不允许写入超过 5000 行
【发布时间】:2011-02-04 06:36:43
【问题描述】:

谁能告诉我为什么 PHPExcel 不允许超过 5000 行。 我正在使用开源 PHPExcel 在我的项目中生成报告,但我无法从 Mysql-DB 写入超过 5000 行的数据。执行查询时,我的结果集获取 7230 条记录。我该如何解决它..

【问题讨论】:

  • 你能准确地检索 5000 行吗?如果是这种情况,PHPExcel 可能存在限制,您最好在 CodePlex 的支持论坛上提问 - 我一直发现对 PHPExcel 的支持非常好。如果不是,则可能是您的服务器的内存/超时问题。

标签: php phpexcel


【解决方案1】:

几乎可以肯定这是超时或内存问题。工作表大小的唯一 PHPExcel 限制是 65,536 行和 256 (IV) 列(使用 Excel5 编写器时);或 1,048,576 行和 16,384 (XFD) 列(使用 Excel2007 Writer 时)。

确保始终启用您的错误记录...使用 try/catch 块来捕获任何 PHPExcel 异常。并阅读有关内存和性能的 PHPExcel 站点讨论线程。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。您将需要分配足够的时间和内存限制。

    我已经在 3 个不同的服务器上测试了我的解决方案,结果如下:

    大约 5000 条记录(12 列)

    阅读文件:
    09:48:22 内存使用峰值:1.25 MB

    读取数据:
    09:48:31 内存使用峰值:54.5 MB

    将数据索引到数组后:
    09:48:35 内存使用峰值:68.5 MB

    记录:4504

    索引后,我增加了读取 22.000 条记录的内存和时间,达到 370.00MB

    这是解决方案(假设代码序列中的其他所有内容都是正确的) 您在程序/函数中调用 PHPExcel 的位置:

    ini_set("max_execution_time", 'time_limit'); //see manual
    

    在此处进行所有初始化,以便所有对象都准备好,然后分配内存用于读取文件并将数据索引到程序内部结构中:

    ini_set('memory_limit', '???'); //your memory limit as string
    $excel = $excelReader->load($filePath);
    "Memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB"
    //do the rest of the structure!
    

    一个好主意是通过某些类别的数据管理所有这些,这样您就不会遇到 400 MB - 容易出错!

    【讨论】:

    • ini_set('memory_limit', '-1');独自一人往往会解决这个问题
    【解决方案3】:

    几乎可以肯定这是超时或内存问题。工作表大小的唯一 PHPExcel 限制是 65,536 行和 256 (IV) 列(使用 Excel5 编写器时);或 1,048,576 行和 16,384 (XFD) 列(使用 Excel2007 Writer 时)。

    你可以改变这一行

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    

    作为

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    

    然后它允许写入超过 65536 行的记录。

    【讨论】:

      【解决方案4】:

      没有你的代码或类的代码我相信是相当困难的......你的意思是你不能在 XLS 文件或工作表中写入超过 5k 行吗?否则,一个丑陋的解决方法可能是在第一张表中写入 5K 行,在第二张表中写入其余行(因此,如果 DB 变大,则每张表中写入 5K 行)。 我不认为 XLS 有 5k 行的限制,所以你的脚本应该有问题或配置错误。你试过几次了吗?它总是打印 5k 行吗?或者可能是由于超时? (你的脚本或连接)

      【讨论】:

        【解决方案5】:

        此类问题很可能是服务器内存问题。你在什么类型的服务器上,你确定它有足够的内存和资源来处理大型数据文件吗?如果你不能告诉任何一种方式,最好的解决方法是一次读取几千条记录,处理它们,然后移动到下一个块。我自己更愿意将大数据文件分成可管理的部分(文件),然后我可以在这些部分上处理每个部分以获得我想要的结果。处理完所有部分后,可以将它们合并在一起以形成一个新的大数据文件。

        【讨论】:

          猜你喜欢
          • 2020-03-04
          • 1970-01-01
          • 2015-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-02
          • 2021-08-30
          • 2010-11-18
          相关资源
          最近更新 更多