7

我正在尝试使用 PHPExcel1.7.3c 读取一个 17MB 的 excel 文件(2003),但是在超过我的 120 秒限制后,它在加载文件时已经崩溃。是否有另一个图书馆可以更有效地做到这一点?我不需要样式,我只需要它支持 UTF8。谢谢你的帮助

4

6 回答 6

9

使用 PHPExcel 时,文件大小不是一个好的衡量标准,更重要的是了解每个工作表中的单元格数量(行 x 列)。

如果您不需要造型,您是否致电:

$objReader->setReadDataOnly(true);

在加载文件之前?

如果您不需要访问所有工作表或仅访问工作表中的某些单元格,请查看使用

$objReader->setLoadSheetsOnly(array(1,2))

或者

$objReader->setLoadSheetsOnly(1)

或定义一个 readFilter

你在使用单元缓存吗?如果有,是什么方法?这会减慢加载时间。

于 2010-06-03T13:55:36.497 回答
2

如果您从读取的 Excel 文件中唯一需要的是数据,那么这是我读取大型 Excel 文件的方法:

我在我的服务器上安装 gnumeric,即使用 debian/ubuntu:apt-get install gnumeric

然后读取我的 excel 文件并将其存储到二维数据数组中的 php 调用非常简单(维度是行和列):

system("ssconvert \"$excel_file_name\" \"temp.csv\"");
$array = array_map("str_getcsv", file("temp.csv"));

然后我可以用我的数组做我想做的事。对于一个 10MB 的大 xls 文件,这需要不到 10 秒的时间,同时我需要在我最喜欢的电子表格软件上加载文件!

对于非常大的文件,您应该使用 fopen() 和 file_getcsv() 函数并做您必须做的事情,而不将数据存储在一个巨大的数组中,以避免使用 file() 函数将整个 csv 文件存储在内存中。这会更慢,但不会吃掉服务器的所有内存!

于 2013-09-17T14:04:34.350 回答
1

17MB 是一个很大的文件。

计算一个 1MB 文件需要多长时间来解析,这样您就可以计算出一个 17MB 文件需要多长时间。那么一种选择可能就是增加您的 120 秒限制。

或者,您可以导出到 CSV,这样会更有效,然后通过 PHP 的 fgetcsv 导入。

于 2010-06-03T13:50:46.047 回答
1

我听说Excel Explorer更适合读取大文件。

于 2010-06-03T13:57:53.063 回答
0

也许您可以转换/导出为 csv,并使用内置的 fgetcsv()。取决于你需要什么样的功能。

于 2010-06-29T00:59:45.590 回答
0

我目前正在使用电子表格阅读器(https://github.com/nuovo/spreadsheet-reader),它的阅读速度非常快XLSXODS并且CSV仅在阅读XLS格式时出现了问题。

于 2015-04-01T20:10:35.050 回答