thinkphp本身不内置excel导出功能,需结合phpspreadsheet库实现:执行composer require phpoffice/phpspreadsheet安装,设置simsun字体、utf-8响应头及日期数值类型+格式码,大文件用getrowiterator流式读取,禁用toarray(),中文表头需清洗映射。

ThinkPHP 本身不内置 Excel 导出功能,但结合成熟、轻量、兼容性好的第三方库(如 PhpSpreadsheet),可以高效、稳定地实现数据导出与 Excel 文件生成,满足日常办公自动化需求。
推荐方案:使用 PhpSpreadsheet(官方推荐替代 PHPExcel)
PHPExcel 已停止维护,PhpSpreadsheet 是其官方继任者,支持 Excel 2007+(.xlsx)、CSV、ODS 等格式,API 清晰,中文文档较完善,与 ThinkPHP 6/8 兼容良好。
- 安装命令:composer require phpoffice/phpspreadsheet
- 无需额外扩展(如 zip 或 xmlwriter),基础环境即可运行
- 支持设置单元格样式、合并、公式、图片、多工作表等高级功能
简单导出:从数据库查询结果生成 Excel 表格
以导出用户列表为例,控制器中可这样写:
- 先用 Db 或模型获取数据(如
UserModel::select()) - 实例化
Spreadsheet,获取默认工作表 - 用
fromArray()快速写入二维数组数据(含表头) - 设置响应头为
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,并触发下载
注意:避免直接输出大文件到内存,超万行建议启用「流式写入」或分批次导出。
提升体验:添加样式、标题与自动列宽
办公场景常需专业排版。可在写入数据后补充以下操作:
- 第一行设为加粗、居中、背景色(如
$sheet->getStyle('A1:Z1')->applyFromArray([...])) - 调用
$sheet->getColumnDimension('A')->setAutoSize(true)自适应列宽 - 冻结首行(
$sheet->freezePane('A2')),方便滚动查看 - 导出前设置文件名含日期(如
users_20240520.xlsx),便于归档
进阶技巧:模板填充与批量导出
已有固定格式的 Excel 模板(如带 Logo、固定表头、汇总公式)?可用 IOFactory::load() 加载模板,定位单元格填入数据,再保存为新文件。
- 适合财务报表、审批单、统计看板等标准化输出
- 多个 Sheet 可分别处理(
$spreadsheet->getSheet(1)->setCellValue(...)) - 如需定时导出(如每日凌晨导出昨日数据),可配合 ThinkPHP 的命令行指令 + Linux crontab 实现无人值守
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











