【发布时间】: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);而超时,那么您将很难找到任何可以处理此文件的库,而不是基于读取文件的本机代码扩展名,例如COM或Ilia 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 或其他地方可能缺少的一些设置吗?