什么是PhpSpreadsheet,为什么需要它?
PhpSpreadsheet是一个强大的PHP库,用于处理电子表格。它可以读取、写入和编辑CSV、XLS、XLSX、ODS等格式的文件。与PHP内置函数(例如fgetcsv)不同,PhpSpreadsheet提供了面向对象的方法、自动编码处理、支持样式、公式和大数据量。该库非常适合从Web表单导入/导出数据、生成报告、数据库之间的迁移以及与Excel/Google Sheets集成。
安装
通过Composer进行安装:
composer require phpoffice/phpspreadsheet安装后,加载自动加载器:
require 'vendor/autoload.php';主要功能
- 读取CSV — 将文件加载到Spreadsheet对象中,并自动检测分隔符。
- 写入CSV — 创建并保存文件,可配置分隔符、引号和BOM。
- 工作表操作 — 创建、删除、重命名和复制工作表。
- 格式化 — 单元格样式(字体、颜色、边框、对齐方式)。
- 公式和函数 — 支持SUM、AVERAGE、IF等。
- 大数据处理 — 通过Xlsx Writer进行流式写入,以降低内存消耗。
代码示例:读取和写入CSV
读取CSV文件并输出数据:
use PhpOffice\\PhpSpreadsheet\\IOFactory;
$inputFileName = './data.csv';$spreadsheet = IOFactory::load($inputFileName);$worksheet = $spreadsheet->getActiveSheet();$data = $worksheet->toArray();
foreach ($data as $row) { echo implode(', ', $row) . "";}将数据写入CSV:
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Csv;
$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Имя');$sheet->setCellValue('B1', 'Email');$sheet->setCellValue('A2', 'Иван');$sheet->setCellValue('B2', 'ivan@example.com');
$writer = new Csv($spreadsheet);$writer->setDelimiter(';');$writer->setEnclosure('"');$writer->save('./output.csv');何时使用
在以下情况下推荐使用PhpSpreadsheet:
- 需要在同一个项目中支持多种格式(CSV、XLSX、ODS)。
- 需要精确的格式化(颜色、字体、合并单元格)。
- 需要处理公式或大数据集(超过10,000行)。
- 您更喜欢面向对象编程风格,并且不想编写底层解析器。
对于简单的任务(例如读取结构已知的单个CSV),可以使用PHP内置函数。但如果项目不断增长并需要灵活性,PhpSpreadsheet将成为不可或缺的工具。