TypechoJoeTheme

至尊技术网

登录
用户名
密码

Excel导出全攻略:用PhpSpreadsheet实现高效数据导出(深度教程)

2025-08-06
/
0 评论
/
111 阅读
/
正在检测是否收录...
08/06

一、为什么选择PhpSpreadsheet?

在开发后台管理系统时,数据导出Excel是刚需。早年我们常用PHPExcel,但它的性能瓶颈明显(单个文件超过5MB就卡顿)。PhpSpreadsheet作为其现代替代品,不仅支持PHP7+,还优化了内存管理,实测导出50万行数据内存占用仅增加30%。

安装只需一行命令:
bash composer require phpoffice/phpspreadsheet

二、基础导出七步法

  1. 创建空白工作簿
    php use PhpOffice\PhpSpreadsheet\Spreadsheet; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet();

  2. 设置表头技巧
    建议使用关联数组动态生成表头:
    php $headers = ['ID', '用户名', '注册时间']; foreach($headers as $col => $title) { $sheet->setCellValueByColumnAndRow($col+1, 1, $title); }

  3. 填充数据实战
    数据库查询结果直接写入:
    php $data = UserModel::all(); // 假设是Eloquent集合 $row = 2; // 从第二行开始 foreach($data as $item) { $sheet->setCellValue('A'.$row, $item->id) ->setCellValue('B'.$row, $item->username) ->setCellValue('C'.$row, $item->created_at); $row++; }

  4. 样式美化方案
    添加边框和背景色:
    php $styleArray = [ 'borders' => [ 'allBorders' => ['borderStyle' => 'thin'], ], 'fill' => [ 'fillType' => 'solid', 'color' => ['argb' => 'FFCCCCCC'] ] ]; $sheet->getStyle('A1:C1')->applyFromArray($styleArray);

  5. 列宽自适应
    php foreach(range('A','C') as $column) { $sheet->getColumnDimension($column)->setAutoSize(true); }

  6. 导出格式选择
    支持xlsx、csv、pdf等多种格式:
    php $writer = new Xlsx($spreadsheet); // $writer = new Csv($spreadsheet);

  7. 浏览器下载实现
    php header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="users.xlsx"'); $writer->save('php://output'); exit;

三、高级功能实战

1. 动态多Sheet处理

php $spreadsheet->createSheet(); $spreadsheet->setActiveSheetIndex(1); $sheet2 = $spreadsheet->getActiveSheet(); $sheet2->setTitle('订单数据'); // 写入第二张表数据...

2. 复杂单元格合并

php $sheet->mergeCells('A1:D1'); $sheet->setCellValue('A1', '2023年度销售汇总');

3. 公式计算支持

php $sheet->setCellValue('D2', '=SUM(A2:C2)');

四、性能优化方案

  1. 内存控制
    启用单元格缓存:
    php $cacheSettings = new Memory(); \PhpOffice\PhpSpreadsheet\Settings::setCache($cacheSettings);

  2. 分块写入
    大数据量建议每5000行保存一次:
    php if($row % 5000 == 0) { $writer->save('temp_'.$row.'.xlsx'); }

  3. 定时清理
    php $spreadsheet->disconnectWorksheets(); unset($spreadsheet);

五、常见问题排查

  1. 中文乱码
    确保文件头部声明:
    php header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');

  2. 超时处理
    settimelimit(0) 取消执行时间限制

  3. 样式不生效
    检查是否在最后才应用样式,避免被后续操作覆盖


结语

办公自动化Excel导出PhpSpreadsheet教程PHP数据处理XlsxWriter
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/35055/(转载时请注明本文出处及文章链接)

评论 (0)