ark4ne/xl-reader

高性能Excel阅读器(CSV,TSV,XLSX)

v1.0.2 2024-04-22 12:21 UTC

This package is auto-updated.

Last update: 2024-09-22 13:16:50 UTC


README

Build Status Coverage Status

高性能excel阅读器,具有非常低的内存消耗。

安装

$ composer require ark4ne/xl-reader

文件支持

  • xlsx: 速度最快的xlsx阅读器。
  • tsv: tsv阅读器。
  • csv: 可配置的csv阅读器(自动检测逗号或分号)。

使用方法

读取文件

$file = "my-calc.xlsx";

$reader = \Ark4ne\XlReader\Factory::createReader($file);

$reader->load();

foreach ($reader->read() as $row){
    // do stuff
}

每个 $row 将包含通过列键(A,B,C,...)索引的数据。

/*
my-calc.xlsx
| A     | B     | C    |
| abc   | 123   | some |
*/
foreach ($reader->read() as $row){
    $row === [
        'A' => 'abc',
        'B' => '123',
        'C' => 'some',
    ];
}

在excel中,空单元格不会报告

/*
my-calc.xlsx
| A     | B     | C    |
| abc   |       | some |
*/

foreach ($reader->read() as $row){
    // do stuff
    $row === [
        'A' => 'abc',
        'C' => 'some',
    ];
}

对于数字(mac)和许多其他xlsx生成器,空单元格将被报告为 null

/*
my-calc.xlsx
| A     | B     | C    |
| abc   |       | some |
*/

foreach ($reader->read() as $row){
    // do stuff
    $row === [
        'A' => 'abc',
        'B' => null,
        'C' => 'some',
    ];
}

处理工作表(XLSX阅读器)

默认情况下,读取第一个工作表。

您可以使用 getWorksheets() 获取所有工作表。

$worksheets = $reader->getWorksheets();
/*
[
    ['id' => 1, 'name' => 'sheet 1'],
    ['id' => 2, 'name' => 'sheet 2'],
]
*/

您可以使用 getSelectedWorksheet() 获取所选工作表。

$worksheet = $reader->getSelectedWorksheet();
/*
['id' => 1, 'name' => 'sheet 1'],
*/

您有三种方法选择要处理的工作表

  • 按索引: selectSheetByIndex(int $index)
  • 按id: selectSheetById(int $id)
  • 按名称: selectSheetByName(string $name)

性能

内存

内存使用量仅受要读取的字符串数量影响

load() 方法直接受此影响。要加载的字符串越多,我们需要的加载时间就越长。(逻辑,任何东西都是神奇的)

一旦字符串被加载,我们就达到了内存使用的峰值。

读取数据几乎不消耗内存。
只有当前行会被加载到内存中。

读取

1024个字符串的基准测试

读取速度取决于要读取的单元格数量。要读取的单元格越多,读取时间就越长。

然而,要读取的单元格数量对内存使用没有影响。

所有基准测试结果