dcat-x/easy-excel

A simple and elegant Excel read/write library based on OpenSpout, with minimal memory usage

Fund package maintenance!
dcat-x

Installs: 61

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/dcat-x/easy-excel

v1.0.2 2026-01-13 01:50 UTC

This package is not auto-updated.

Last update: 2026-01-13 05:01:41 UTC


README

Easy Excel

Tests Latest Version on Packagist Total Downloads PHP Version License

基于 OpenSpout 封装的 Excel 读写工具,内存占用极低。

安装 | 使用 | 更新日志 | 贡献指南

特性

  • 读写 Excel 文件,内存占用极低
  • 支持 xlsxcsvods 格式
  • 分块处理,轻松应对大文件
  • 集成 Flysystem,灵活存储
  • 支持自定义表头和多工作表
  • 简洁直观的 API

安装

composer require dcat-x/easy-excel

环境要求

  • PHP >= 8.2
  • PHP 扩展:zipxmlreader

使用

导出

下载文件

use Dcat\EasyExcel\Excel;

$data = [
    ['id' => 1, 'name' => 'Tom', 'email' => 'tom@example.com'],
    ['id' => 2, 'name' => 'Jerry', 'email' => 'jerry@example.com'],
];

// 自定义表头
$headings = ['id' => 'ID', 'name' => '姓名', 'email' => '邮箱'];

Excel::export($data)->headings($headings)->download('users.xlsx');
Excel::export($data)->headings($headings)->download('users.csv');
Excel::export($data)->headings($headings)->download('users.ods');

保存到服务器

use Dcat\EasyExcel\Excel;
use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;

// 保存到本地路径
Excel::export($data)->store('/tmp/users.xlsx');

// 使用 Flysystem
$filesystem = new Filesystem(new LocalFilesystemAdapter(__DIR__));
Excel::export($data)->disk($filesystem)->store('users.xlsx');

获取文件内容

use Dcat\EasyExcel\Excel;

$xlsx = Excel::xlsx($data)->raw();
$csv = Excel::csv($data)->raw();
$ods = Excel::ods($data)->raw();

导入

读取所有数据

use Dcat\EasyExcel\Excel;

$headings = ['id', 'name', 'email'];

$allSheets = Excel::import('/tmp/users.xlsx')->headings($headings)->toArray();
// 返回: ['Sheet1' => [['id' => 1, 'name' => 'Tom', ...], ...]]

读取指定工作表

use Dcat\EasyExcel\Excel;

// 第一个工作表
$data = Excel::import('/tmp/users.xlsx')->first()->toArray();

// 最后活动的工作表
$data = Excel::import('/tmp/users.xlsx')->active()->toArray();

// 按名称或索引获取
$data = Excel::import('/tmp/users.xlsx')->sheet('Sheet1')->toArray();
$data = Excel::import('/tmp/users.xlsx')->sheet(0)->toArray();

遍历工作表

use Dcat\EasyExcel\Excel;
use Dcat\EasyExcel\Contracts\Sheet;
use Dcat\EasyExcel\Support\SheetCollection;

Excel::import('/tmp/users.xlsx')->each(function (Sheet $sheet) {
    $name = $sheet->getName();
    $index = $sheet->getIndex();

    $sheet->chunk(1000, function (SheetCollection $collection) {
        foreach ($collection as $row) {
            // 处理每一行
        }
    });
});

分块处理

use Dcat\EasyExcel\Excel;
use Dcat\EasyExcel\Support\SheetCollection;

// 每次处理 1000 行,适合大文件
Excel::import('/tmp/users.xlsx')
    ->first()
    ->chunk(1000, function (SheetCollection $collection) {
        $data = $collection->toArray();
        // 批量处理数据...
    });

测试

composer test

更新日志

详见 CHANGELOG

贡献

详见 CONTRIBUTING

许可证

MIT 许可证,详见 LICENSE