【问题标题】:Troubles parsing heavily formatted excel document with PHP使用 PHP 解析重格式的 excel 文档时遇到问题
【发布时间】:2015-09-04 11:54:21
【问题描述】:

我知道已经有很多类似的问题(我已经阅读了大部分),但我仍然没有找到解决方案,所以我想我会问我自己的具体问题。

好的,过去两天我一直在研究并尝试在 php 中解析 Excel (.xlsx) 电子表格。我尝试使用PHPExcel 库,但是,在尝试将电子表格加载到内存时它会超时。电子表格不是很大,只有 240kb,但它确实有 40 多个工作表,每个工作表都经过大量格式化(即单元格颜色、字体大小/颜色等)。由于我不需要任何格式,我尝试$objReader->setReadDataOnly(true); 以忽略它,但在尝试读取文件时它仍然超时。

所以我的下一步是尝试只加载我实际需要使用的最后几张工作表,$objReader->setLoadSheetsOnly(array(42,43,44,45)); 这加载成功,但现在问题是最后一张表几乎完全是公式,它们汇总并从以前的工作表。而且由于我排除了那些早期的工作表以加载文档,因此在检索每个单元格的值时我不能使用$cell->getCalculatedValue();,从而使其他所有内容都过时了。

所以我的问题是,我还能做些什么来加载和阅读这个 Excel 电子表格吗?

我应该尝试使用另一个库吗?或者我应该尝试一种完全不同的方法,因为我的最终目标是能够将部分数据上传到数据库?

Here 是我正在使用的特定电子表格的链接。

感谢您抽出宝贵时间阅读本文并为您提供任何帮助。

【问题讨论】:

  • 如果它因$objReader->setReadDataOnly(true); 而超时,那么您将很难找到任何可以处理此文件的库,而不是基于读取文件的本机代码扩展名,例如COMIlia Alshanetsky's 商业版libXL 的Excel 扩展;但尝试使用列表here
  • 使用 PHPExcel 1.7.9 生产版本在我的开发机器上读取工作簿的调用时间为 1.9218 秒(总共 46 个工作表),所有格式,内存使用量为 19.75 MB:1.6848 秒没有格式化和 17.25 MB 内存....您使用的是什么版本的 PHPExcel?
  • 哦,好吧,我想你刚刚解决了我的问题......我以为我使用的是最新版本的 PHPExcel,但结果我使用的是 1.7.6,不太确定这是怎么回事。下班回家后我会试用 1.7.9 并告诉你。感谢您的帮助。
  • @MarkBaker 好的,它一定与我的 php 和/或 Apache 设置有关,因为当我尝试加载工作簿时,即使给定 60 秒,它仍然会超时。我已经切换到 1.7.9 版本,所以您能想到我在 php.ini 或其他地方可能缺少的一些设置吗?

标签: php phpexcel


【解决方案1】:

好的,我知道为什么要花这么长时间,部分原因可能是我使用的是过时的 PHPExcel 版本,但我相信真正的罪魁祸首是我在以前的项目中启用了 XDebug。因为一旦我禁用该脚本以 1.5001 秒的速度加载工作簿并使用 17.5 MB 内存就可以了。感谢大家的帮助,这让我找到了正确的方向。

【讨论】:

    【解决方案2】:

    使用下面的代码

    require_once 'Classes/PHPExcel.php';
    $objPHPExcel = PHPExcel_IOFactory::load("myExcelFile.xls");
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML');
    $objWriter->writeAllSheets();
    $objWriter->save('php://output');
    

    您仍然收到超时错误,这意味着您的脚本运行时间超过 30 秒,但 PHP 的执行时间限制为 30 秒

    php脚本请加max execution time

    【讨论】:

    • 我想你误解了我的问题。我不是想写一个excel文件,只是读它。此外,增加执行时间只能在一定程度上起作用,然后在某个时候变成一个可笑的大值,这对于最终用户来说是不可接受的。不过谢谢
    • 抱歉,如果可能的话,请使用这个答案stackoverflow.com/questions/4666746/… 进行块读取,您可以解决您的问题
    • @likayat - 块读取是为了减少内存,实际上会增加执行时间,所以不太可能有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2012-11-12
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多