jackmartin/readerexcel

Excel, OpenOffice 读取库

v0.5.12 2017-12-29 16:57 UTC

This package is auto-updated.

Last update: 2024-09-05 19:42:31 UTC


README

Latest Stable Version Total Downloads License


composer require jackmartin/readerexcel

描述 - 描述

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

要求 - 要求

用法 - 用法

但是,现在也支持文件格式中可能的多表读取。 (对于 CSV,它被处理为只有一个表。)

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

示例 - 示例


php reader.php test.xlsx

include_once __DIR__ . '/vendor/autoload.php';

use ReaderExcel\SpreadsheetReader;

$file = __DIR__ . '/test.xlsx';

$reader = new SpreadsheetReader($file);

$Sheets = $reader->Sheets();

foreach ($Sheets as $Index => $Name) {

    $reader->ChangeSheet($Index);

    foreach ($reader as $Key => $Row) {

        print_r($Row);

    }

}

如果更改到与当前打开的同一张表,文件中的位置仍会回到开头,以便与更改到不同表时的行为一致。

关于库性能的说明

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

待办事项

  • ODS 日期格式;

许可

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