nox-it/yii2-nox-spreadsheet-reader

此包已废弃且不再维护。未建议替代包。

用于读取 Excel、OpenOffice 和结构化文本文件的电子表格读取库。基于 Martins Pilsetnieks 版本。

1.0.3 2017-05-27 17:02 UTC

This package is auto-updated.

Last update: 2022-06-01 20:11:40 UTC


README

spreadsheet-reader 是一个 PHP 电子表格读取器,与其他电子表格读取器不同的是,其主要目标是实现高效的数据提取,可以处理大型(即非常大)的文件。到目前为止,它可能不一定在 CPU、时间和 I/O 方面都非常高效,但至少它不会耗尽内存(除非是 XLS 文件)。

到目前为止,XLSX、ODS 和文本/CSV 文件的解析应该是内存高效的。XLS 文件的解析使用的是来自 http://code.google.com/p/php-excel-reader/ 的 php-excel-reader,遗憾的是,它在处理更大的电子表格时存在内存问题,因为它一次性读取所有数据并将它们全部保留在内存中。

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads composer.lock

要求

安装

安装此扩展的首选方式是通过 composer

  • 运行以下命令之一:
php composer.phar require --prefer-dist "nyx-solutions/yii2-nyx-spreadsheet-reader" "*"

或者

"nyx-solutions/yii2-nyx-spreadsheet-reader": "*"

将其添加到您的应用程序 composer.json 文件的 require 部分。

用法

所有数据都是按顺序从文件中读取的,每行数据作为数值数组返回。这是读取文件的最简单方法

$reader = new SpreadsheetReader('example.xlsx');
foreach ($reader as $row) {
    print_r($row);
}

然而,现在也支持读取具有可能的多工作表格式的文件。对于 CSV,它被视为只有一个工作表处理。

您可以通过调用 Sheets() 方法来检索文件中包含的工作表信息,该方法返回一个数组,其中键为工作表索引,值为工作表名称。然后,您可以通过将索引传递给 ChangeSheet($Index) 方法来更改当前正在读取的工作表。

示例

$reader = new SpreadsheetReader('example.xlsx');
$sheets = $reader->Sheets();

foreach ($sheets as $index => $name) {
    echo 'Sheet #'.$index.': '.$name;

    $reader->ChangeSheet($index);

    foreach ($reader as $row) {
        print_r($row);
    }
}

如果更改的工作表与当前打开的工作表相同,则文件中的位置仍然会回到开头,以符合更改到不同工作表时的相同行为。

关于库性能的说明

  • CSV 和文本文件严格按顺序读取,因此性能应该是 O(n);
  • 在解析 XLS 文件时,会将整个文件内容读入内存,因此大型 XLS 文件可能导致 "内存不足" 错误;
  • Excel文件内部使用所谓的“共享字符串”来优化相同字符串多次重复的情况。内部XLSX是一个XML文本,按顺序解析以从中提取数据,然而,在某些情况下,这些共享字符串可能成为问题——有时Excel可能将工作表中的所有或几乎所有字符串放入共享字符串文件(这是一个单独的XML文本),而且不一定是相同的顺序。最坏的情况是当它们是倒序的——对于每个字符串,我们需要从开始解析共享字符串XML,如果我们想避免将数据保存在内存中。为此,XLSX解析器有一个用于共享字符串的缓存,如果总共享字符串计数不是太高,就会使用它。如果你遇到内存错误,可以尝试将SpreadsheetReader_XLSX中的SHARED_STRING_CACHE_LIMIT常量调整到一个更低的值。

待办事项

  • ODS日期格式;

许可

本库中所有代码均根据LICENSE文件中包含的MIT许可进行许可,然而,目前库依赖于php-excel-reader库来解析XLS文件,该库根据PHP许可进行许可。

Yii2