当前位置: 首页 > news >正文

PHP高效、轻量级表格数据处理库 OpenSpout ,很好用

OpenSpout 是一个高效、轻量级的 PHP 库,用于处理电子表格文件(如 Excel 和 CSV)。它支持读取和写入大型文件,且内存占用低。本文将详细介绍如何安装和使用 OpenSpout。

目录

  • 安装

  • 基本使用

  • 高级功能

  • 参考文档

安装

OpenSpout 可以通过 Composer 安装。确保你已经安装了 Composer,然后在项目根目录下运行以下命令:

composer require openspout/openspout

安装完成后,Composer 会自动加载 OpenSpout。

基本使用

读取 Excel 文件

以下是一个读取 Excel 文件的示例:

require 'vendor/autoload.php';

use OpenSpout\Reader\Common\Creator\ReaderEntityFactory;

// 创建 Reader 对象
$reader = ReaderEntityFactory::createXLSXReader();

// 打开文件
$reader->open('example.xlsx');

foreach ($reader->getSheetIterator() as $sheet) {
    foreach ($sheet->getRowIterator() as $row) {
        // 处理每一行数据
        $cells = $row->getCells();
        print_r($cells);
    }
}

// 关闭 Reader
$reader->close();

写入 Excel 文件

以下是一个写入 Excel 文件的示例:

require 'vendor/autoload.php';

use OpenSpout\Writer\Common\Creator\WriterEntityFactory;
use OpenSpout\Common\Entity\Row;

// 创建 Writer 对象
$writer = WriterEntityFactory::createXLSXWriter();

// 打开文件
$writer->openToFile('output.xlsx');

// 创建行数据
$rows = [
    WriterEntityFactory::createRowFromArray(['Name', 'Age', 'City']),
    WriterEntityFactory::createRowFromArray(['John Doe', 30, 'New York']),
    WriterEntityFactory::createRowFromArray(['Jane Doe', 25, 'Los Angeles']),
];

// 写入行数据
foreach ($rows as $row) {
    $writer->addRow($row);
}

// 关闭 Writer
$writer->close();

读取 CSV 文件

以下是一个读取 CSV 文件的示例:

require 'vendor/autoload.php';

use OpenSpout\Reader\Common\Creator\ReaderEntityFactory;

// 创建 Reader 对象
$reader = ReaderEntityFactory::createCSVReader();

// 打开文件
$reader->open('example.csv');

foreach ($reader->getSheetIterator() as $sheet) {
    foreach ($sheet->getRowIterator() as $row) {
        // 处理每一行数据
        $cells = $row->getCells();
        print_r($cells);
    }
}

// 关闭 Reader
$reader->close();

写入 CSV 文件

以下是一个写入 CSV 文件的示例:

require 'vendor/autoload.php';

use OpenSpout\Writer\Common\Creator\WriterEntityFactory;
use OpenSpout\Common\Entity\Row;

// 创建 Writer 对象
$writer = WriterEntityFactory::createCSVWriter();

// 打开文件
$writer->openToFile('output.csv');

// 创建行数据
$rows = [
    WriterEntityFactory::createRowFromArray(['Name', 'Age', 'City']),
    WriterEntityFactory::createRowFromArray(['John Doe', 30, 'New York']),
    WriterEntityFactory::createRowFromArray(['Jane Doe', 25, 'Los Angeles']),
];

// 写入行数据
foreach ($rows as $row) {
    $writer->addRow($row);
}

// 关闭 Writer
$writer->close();

高级功能

处理大型文件

OpenSpout 通过流式处理支持大型文件,避免内存溢出。以下是一个处理大型文件的示例:

require 'vendor/autoload.php';

use OpenSpout\Reader\Common\Creator\ReaderEntityFactory;

// 创建 Reader 对象
$reader = ReaderEntityFactory::createXLSXReader();

// 打开文件
$reader->open('large_file.xlsx');

foreach ($reader->getSheetIterator() as $sheet) {
    foreach ($sheet->getRowIterator() as $row) {
        // 处理每一行数据
        $cells = $row->getCells();
        print_r($cells);
    }
}

// 关闭 Reader
$reader->close();

自定义样式

OpenSpout 允许你自定义单元格样式。以下是一个自定义样式的示例:

require 'vendor/autoload.php';

use OpenSpout\Writer\Common\Creator\WriterEntityFactory;
use OpenSpout\Common\Entity\Style\Style;
use OpenSpout\Common\Entity\Row;

// 创建 Writer 对象
$writer = WriterEntityFactory::createXLSXWriter();

// 打开文件
$writer->openToFile('styled_output.xlsx');

// 创建样式
$style = (new Style())
    ->setFontBold()
    ->setFontSize(14)
    ->setFontColor(Color::BLUE)
    ->setBackgroundColor(Color::YELLOW);

// 创建行数据
$rows = [
    WriterEntityFactory::createRowFromArray(['Name', 'Age', 'City'], $style),
    WriterEntityFactory::createRowFromArray(['John Doe', 30, 'New York']),
    WriterEntityFactory::createRowFromArray(['Jane Doe', 25, 'Los Angeles']),
];

// 写入行数据
foreach ($rows as $row) {
    $writer->addRow($row);
}

// 关闭 Writer
$writer->close();

参考文档

  • OpenSpout 官方文档

  • GitHub 仓库

通过本文,你应该已经掌握了 OpenSpout 的基本安装和使用方法。希望这对你处理电子表格文件有所帮助!


文章转载自:

http://vW7VKJHz.bqrtq.cn
http://UEwheQZG.bqrtq.cn
http://Nweey5yX.bqrtq.cn
http://m4Oo6kkf.bqrtq.cn
http://ImRVisYZ.bqrtq.cn
http://tY1uBvan.bqrtq.cn
http://2LBI6Sc3.bqrtq.cn
http://gDCUwZ6X.bqrtq.cn
http://u8j4OMFa.bqrtq.cn
http://j0bw9Tqc.bqrtq.cn
http://QLwKifcT.bqrtq.cn
http://KFAU9vNa.bqrtq.cn
http://PL6KGTfD.bqrtq.cn
http://mnHD3XEe.bqrtq.cn
http://UWj8y0N1.bqrtq.cn
http://yK8mrNI1.bqrtq.cn
http://DqEiSTqv.bqrtq.cn
http://0cmq2bbG.bqrtq.cn
http://tazPu7He.bqrtq.cn
http://3C48bgnl.bqrtq.cn
http://z7NAWSY2.bqrtq.cn
http://Q6dmibEM.bqrtq.cn
http://GOlw8aik.bqrtq.cn
http://lSUf0dYY.bqrtq.cn
http://GCjBYjE0.bqrtq.cn
http://2vLULgSm.bqrtq.cn
http://w0MRXT0C.bqrtq.cn
http://JWQhZ4lj.bqrtq.cn
http://l7u6ijci.bqrtq.cn
http://lwx1Jum2.bqrtq.cn
http://www.dtcms.com/a/14635.html

相关文章:

  • 机器学习 - 词袋模型(Bag of Words)实现文本情感分类的详细示例
  • 开源、免费项目管理工具比较:2025最新整理30款
  • 【系统架构设计师】操作系统 - 进程管理 ② ( 进程状态 | 三态模型 | 五态模型 | 进程状态 划分依据 | PCB 程序控制块 的 组织方式 )
  • 认识一下redis的分布式锁
  • MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)
  • C#数据库操作系列---SqlSugar完结篇
  • 【Unity Shader编程】之GPU编程前言
  • wordpress主题设置教程
  • 2025年SEO自动优化工具
  • 数据科学之数据管理|统计学
  • (4/100)每日小游戏平台系列
  • wireshark网络抓包
  • 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 与基于 openEuler 构建 LVS-DR 群集
  • 在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址
  • Unity崩溃后信息结合符号表来查看问题
  • 基于SpringBoot的在线车辆租赁信息管理系统
  • 电脑端调用摄像头拍照:从基础到实现
  • Ubuntu启动geteck/jetlinks实战:Docker启动
  • 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<10>
  • ffmpeg -muxers
  • Vue 3 和 <script setup> 的组件,它使用 v-for 来渲染一个嵌套的菜单结构。
  • vant4 van-list组件的使用
  • 【EI Scopus 双检索 | 稳定EI检索】第二届通信技术与软件工程国际学术会议 (CTSE 2025)
  • Notepad++ 中删除所有以 “pdf“ 结尾的行
  • Uniapp 原生组件层级过高问题及解决方案
  • 【Linux】多线程 -> 从线程概念到线程控制
  • BPMN.js 与 DeepSeek 集成:打造个性化 Web 培训项目的秘诀
  • 网络安全讲座之一:网络安全的重要性
  • C++11新特性之weak_ptr智能指针
  • 【新人系列】Python 入门(三十):工作常用第三方库 - 上