php实现excel导出excel
PHP 实现 Excel 导出
使用 PHPExcel 库(已停止维护,推荐 PhpSpreadsheet)
PHPExcel 是一个流行的库,用于处理 Excel 文件。尽管已停止维护,但仍有大量项目在使用。
安装 PHPExcel(通过 Composer):
composer require phpoffice/phpexcel
导出 Excel 的示例代码:
require_once 'vendor/autoload.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();
// 设置表头
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '年龄');
// 填充数据
$data = [
['张三', 25],
['李四', 30]
];
$row = 2;
foreach ($data as $item) {
$sheet->setCellValue('A' . $row, $item[0]);
$sheet->setCellValue('B' . $row, $item[1]);
$row++;
}
// 设置文件头并输出
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="example.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
使用 PhpSpreadsheet(推荐)
PhpSpreadsheet 是 PHPExcel 的继承者,功能更强大且持续更新。
安装 PhpSpreadsheet:
composer require phpoffice/phpspreadsheet
导出 Excel 的示例代码:
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置表头
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '年龄');
// 填充数据
$data = [
['张三', 25],
['李四', 30]
];
$row = 2;
foreach ($data as $item) {
$sheet->setCellValue('A' . $row, $item[0]);
$sheet->setCellValue('B' . $row, $item[1]);
$row++;
}
// 设置文件头并输出
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="example.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;
使用 CSV 格式导出
如果需要简单快速的导出,可以使用 CSV 格式。
示例代码:
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="example.csv"');
$data = [
['姓名', '年龄'],
['张三', 25],
['李四', 30]
];
$output = fopen('php://output', 'w');
foreach ($data as $row) {
fputcsv($output, $row);
}
fclose($output);
exit;
使用第三方库(如 Box/Spout)
Box/Spout 是一个高性能的库,特别适合处理大型 Excel 文件。
安装 Box/Spout:
composer require box/spout
导出 Excel 的示例代码:
require 'vendor/autoload.php';
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToBrowser('example.xlsx');
// 设置表头
$header = WriterEntityFactory::createRowFromArray(['姓名', '年龄']);
$writer->addRow($header);
// 填充数据
$data = [
['张三', 25],
['李四', 30]
];
foreach ($data as $rowData) {
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
$writer->close();
注意事项
- 确保服务器已安装必要的 PHP 扩展(如
zip和xml)。 - 导出大量数据时,建议使用流式处理以避免内存问题。
- 设置正确的 HTTP 头以确保浏览器正确处理文件下载。
以上方法涵盖了从简单到复杂的 Excel 导出需求,可以根据项目需求选择合适的方案。







