首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >简洁高效 Excel 和 CSV 文件处理工具库

简洁高效 Excel 和 CSV 文件处理工具库

作者头像
Tinywan
发布2025-05-27 10:26:16
发布2025-05-27 10:26:16
5450
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

spatie/simple-excel 正是一款旨在简化 Excel 操作的轻量级工具。作为 Spatie 团队开发的开源项目(项目地址:https://github.com/spatie/simple-excel),它以简洁的 API 和高效的性能,成为开发者处理表格数据的得力助手。

此软件包允许您轻松读取和写入简单的 Excel 和 CSV 文件。幕后生成器用于确保低内存使用率,即使在处理大文件时也是如此。

安装

代码语言:javascript
复制
composer require spatie/simple-excel

使用

读取 CSV

假设您有一个包含此内容的 CSV

代码语言:javascript
复制
email,first_name
john@example.com,john
jane@example.com,jane
代码语言:javascript
复制
use Spatie\SimpleExcel\SimpleExcelReader;

// $rows is an instance of Illuminate\Support\LazyCollection
$rows = SimpleExcelReader::create($pathToCsv)->getRows();

$rows->each(function(array $rowProperties) {
   // in the first pass $rowProperties will contain
   // ['email' => 'john@example.com', 'first_name' => 'john']
});

读取 Excel 文件

读取 Excel 文件与读取 CSV 文件相同。只需确保提供给 SimpleExcelReader 的 create 方法的路径以 xlsx 结尾即可。

代码语言:javascript
复制
use Spatie\SimpleExcel\SimpleExcelReader;

$data = SimpleExcelReader::create('file.xlsx')->get();
foreach ($data as $row) {
    // 处理每一行数据
}

读取不带标头的文件

如果您正在读取的文件不包含标题行,则应使用 noHeaderRow() 方法。

代码语言:javascript
复制
// $rows is an instance of Illuminate\Support\LazyCollection
$rows = SimpleExcelReader::create($pathToCsv)
    ->noHeaderRow()
    ->getRows()
    ->each(function(array $rowProperties) {
       // in the first pass $rowProperties will contain
       // [0 => 'john@example', 1 => 'john']
});

写入文件

以下是编写 CSV 文件的方法

代码语言:javascript
复制
use Spatie\SimpleExcel\SimpleExcelWriter;

$writer = SimpleExcelWriter::create($pathToCsv)
     ->addRow([
        'first_name' => 'John',
        'last_name' => 'Doe',
    ])
    ->addRow([
        'first_name' => 'Jane',
        'last_name' => 'Doe',
    ]);

pathToCsv 中的文件将包含:

代码语言:javascript
复制
first_name,last_name
John,Doe
Jane,Doe

将 Excel 文件流式传输到浏览器

您可以将文件直接流式传输到浏览器,而不是将文件写入磁盘。

代码语言:javascript
复制
$writer = SimpleExcelWriter::streamDownload('your-export.xlsx')
     ->addRow([
        'first_name' => 'John',
        'last_name' => 'Doe',
    ])
    ->addRow([
        'first_name' => 'Jane',
        'last_name' => 'Doe',
    ])
    ->toBrowser();

如果要向浏览器发送大型流,请确保调用 flush()

代码语言:javascript
复制
$writer = SimpleExcelWriter::streamDownload('your-export.xlsx');

foreach (range(1, 10_000) as $i) {
    $writer->addRow([
        'first_name' => 'John',
        'last_name' => 'Doe',
    ]);

    if ($i % 1000 === 0) {
        flush(); // Flush the buffer every 1000 rows
    }
}

$writer->toBrowser();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 概述
  • 安装
  • 使用
    • 读取 CSV
    • 读取 Excel 文件
    • 读取不带标头的文件
  • 写入文件
    • 将 Excel 文件流式传输到浏览器
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档