php 实现excel 导出
使用 PHPExcel 库实现 Excel 导出
PHPExcel 是一个流行的 PHP 库,用于处理 Excel 文件(包括导出)。以下是具体实现方法:
安装 PHPExcel(通过 Composer):
composer require phpoffice/phpexcel
基础导出代码示例:
require_once 'vendor/autoload.php';
use PHPExcel;
use PHPExcel_IOFactory;
$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="export.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
使用 PhpSpreadsheet 实现 Excel 导出
PhpSpreadsheet 是 PHPExcel 的继承者,推荐在新项目中使用。
安装 PhpSpreadsheet:
composer require phpoffice/phpspreadsheet
基础导出代码:
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置数据
$sheet->setCellValue('A1', 'Hello World !');
// 输出
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="simple.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
使用 Laravel Excel 包(适用于 Laravel 框架)
安装 Laravel Excel:
composer require maatwebsite/excel
创建导出类:
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
public function collection()
{
return User::all();
}
}
在控制器中使用:
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
性能优化建议
大数据量导出时考虑分块处理:
// 在 Laravel Excel 中
public function chunkSize(): int
{
return 1000;
}
设置内存限制:
ini_set('memory_limit', '512M');
常见格式设置
设置列宽:
$sheet->getColumnDimension('A')->setWidth(20);
设置单元格样式:
$styleArray = [
'font' => [
'bold' => true,
'color' => ['rgb' => 'FF0000']
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
]
];
$sheet->getStyle('A1:B1')->applyFromArray($styleArray);
合并单元格:
$sheet->mergeCells('A1:B1');






