【问题标题】:Reading a specified number of rows in huge excel file在巨大的excel文件中读取指定数量的行
【发布时间】:2019-04-23 08:48:58
【问题描述】:

我想通过补丁读取一个巨大的excel文件,以减少读取时间。 我写了下面的代码。

$xls = new Spreadsheet_Excel_Reader($path);
$dd=array(0);
for($row=2;$row<=10;$row++){
$val=$xls->val($row,$field);
}

每次读取文件都会花费大量时间,因为文件很大。该文件也会每次都重新加载。

如何只读取文件所需的行以节省时间??

【问题讨论】:

    标签: php excel-reader


    【解决方案1】:

    每次执行 PHP 脚本时都会重新加载文件,这仅仅是因为它没有保持之前的状态。当你说一个大文件时,我们指的是多少条记录/字节?

    要加快读取此类文件的速度,您可以将其放在比 SSD 快得多的 RAM 磁盘(如果使用 Linux)上。或者,读取并存储具有固定记录长度的 CSV 等价物。固定的记录长度将允许您根据需要跳转到段,并轻松检索记录数。

    因此,如果您的记录长度变为 90 个字节/字符,并且您想要记录 100 到 109,您将打开文件进行读取,fseek 到位置 9000 (90 * 100) 并获取接下来的 900 个字符。

    【讨论】:

    • 有没有办法格式化文件以仅读取从 100 到 109 的行,即仅将这些行存储在内存中而不存储其余行??
    • 这完全取决于您希望该过程的自动化程度。如果 XLS 文件每月生成一次,那么值得将其保存为 CSV,然后使用它。如果它是由另一个过程每隔一小时或一天左右生成的,那么它就变成了一个不同的命题。另外,您使用的是什么版本的 XLS 文件?如果它们是 XLSX,则将消耗内存,因为在提取内容之前需要解压缩文件(在内存中完成)。文件是否包含单张工作表,还是涉及多张工作表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2013-11-13
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多