3

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

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

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

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

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

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

感谢您花时间阅读本文以及您可以提供的任何帮助。

4

2 回答 2

1

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

于 2013-08-06T02:00:00.113 回答
0

使用下面的代码

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 秒

max execution time为php脚本增加

于 2013-08-05T05:26:14.263 回答