在 PHP 中处理 Excel 表格(通常指 .xlsx 或 .xls 格式)主要有以下几种常见方式:
✅ 推荐方案:使用第三方库
PhpSpreadsheet(官方推荐,功能强大)
这是 PHP 官方维护的库,支持读写 .xlsx、.xls、.csv 等格式。
安装
composer require phpoffice/phpspreadsheet
示例:创建 Excel 文件并写入数据
<?php
require 'vendor/autoload.php';
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 写入数据
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '年龄');
$sheet->setCellValue('C1', '城市');
$sheet->setCellValue('A2', '张三');
$sheet->setCellValue('B2', 25);
$sheet->setCellVa
lue('C2', '北京');
$sheet->setCellValue('A3', '李四');
$sheet->setCellValue('B3', 30);
$sheet->setCellValue('C3', '上海');
// 保存为 .xlsx 文件
$writer = new Xlsx($spreadsheet);
$writer->save('output.xlsx');
echo "Excel 文件已生成:output.xlsx";
?>
示例:读取 Excel 文件
<?php
require 'vendor/autoload.php';
use PhpOfficePhpSpreadsheetIOFactory;
$spreadsheet = IOFactory::load('input.xlsx');
$sheet = $spreadsheet->getActiveSheet();
foreach ($sheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateAll(true);
$rowData = [];
foreach ($cellIterator as $cell) {
$rowData[] = $cell->getValue();
}
print_r($rowData);
}
?>
SimpleExcel(轻量级,适合简单场景)
composer require maennchen/zipstream-php composer require simple-excel/simple-excel
<?php
require 'vendor/autoload.php';
use SimpleExcelSimpleExcel;
// 写入
$writer = new SimpleExcel('csv', 'output.csv');
$writer->addRow(['姓名', '年龄', '城市']);
$writer->addRow(['张三', 25, '北京']);
$writer->save();
// 读取
$reader = new SimpleExcel('csv', 'input.csv');
while ($row = $reader->nextRow()) {
print_r($row);
}
?>
❌ 不推荐的方式
使用原生 PHP 函数(仅适用于 CSV)
<?php
// 写入 CSV
$fp = fopen('output.csv', 'w');
fputcsv($fp, ['姓名', '年龄', '城市']);
fputcsv($fp, ['张三', 25, '北京']);
fclose($fp);
// 读取 CSV
$fp = fopen('input.csv', 'r');
while (($data = fgetcsv($fp)) !== false) {
print_r($data);
}
fclose($fp);
?>
⚠️ 注意:CSV 不是真正的 Excel 格式,不支持样式、多工作表等功能。
📊 各方案对比
| 方案 | 支持格式 | 功能 | 性能 | 推荐程度 |
|---|---|---|---|---|
| PhpSpreadsheet | .xlsx, .xls, .csv, .ods | 完整(样式、公式、多表) | 中等 | |
| SimpleExcel | .csv, .xlsx | 基础读写 | 快 | |
| 原生 fgetcsv | .csv | 仅 CSV | 最快 | ⭐⭐(仅限简单场景) |
💡 最佳实践建议
- 需要完整 Excel 功能(样式、公式、多工作表)→ 使用 PhpSpreadsheet
- 只需简单读写 CSV → 使用原生
fgetcsv/fputcsv - 大数据量导出 → 考虑使用
PhpSpreadsheet的ChunkWrite模式或生成 CSV
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/482650.html



