使用PHP解析格式严重的excel文档时出现问题


Troubles parsing heavily formatted excel document with PHP

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

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

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

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

还有其他图书馆我可以试着使用吗?或者我应该尝试一种完全不同的方法,因为我的最终目标是能够将部分数据上传到数据库?

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

感谢您花时间阅读本文并提供任何帮助。

好吧,我明白了为什么花了这么长时间,部分原因可能是我使用了过时的PHPExcel版本,但我相信真正的罪魁祸首是我在以前的项目中启用了XDebug。因为一旦我禁用,脚本加载工作簿的速度为1.5001秒,使用了17.5 MB的内存。谢谢你们的帮助,这让我朝着正确的方向看。

使用以下代码

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