jackmartin / readerexcel
Excel, OpenOffice 读取库
v0.5.12
2017-12-29 16:57 UTC
Requires
- php: >=5.6
This package is auto-updated.
Last update: 2024-09-05 19:42:31 UTC
README
composer require jackmartin/readerexcel
描述 - 描述
spreadsheet-reader 是一个 PHP 电子表格读取器,与其他的不同之处在于其主要目标是高效的数据提取,可以处理大型(真正的大型)文件。到目前为止,它可能不一定是 CPU、时间或 I/O 效率的,但至少它不会耗尽内存(也许除了 XLS 文件)。
要求 - 要求
- PHP 5.3.0 或更高版本
- PHP 必须具有 Zip 文件支持(请参阅 https://php.ac.cn/manual/en/zip.installation.php)
- Composer
用法 - 用法
但是,现在也支持文件格式中可能的多表读取。 (对于 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 许可证授权。