nyx-solutions/yii2-nyx-spreadsheet-reader

此包已被废弃,不再维护。没有推荐替代包。

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

1.0.4 2022-06-03 14:09 UTC

This package is auto-updated.

Last update: 2022-06-03 14:11:09 UTC


README

spreadsheet-reader 是一个PHP电子表格读取器,与其它不同的是,其主要目标是高效的数据提取,能够处理大型(真正的大型)文件。到目前为止,它可能不是CPU、时间或I/O效率最高的,但至少它不会耗尽内存(除非是XLS文件)。

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

要求

安装

安装此扩展的首选方式是通过 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