TP6接口Excel导出的实现方法

梦枫吖_8406

梦枫吖_8406

2026-08-22

842人浏览

原创

tp6导出excel必须用原生跳转或表单提交;需正确初始化phpspreadsheet、设宋体字体、显式列宽、批量写表头、日期分步设置格式、中文文件名rawurlencode编码,大文件应异步队列处理。

tp6接口excel导出的实现方法

TP6 接口导出 Excel 不能走 AJAX,必须用原生链接跳转或表单提交,否则无法触发浏览器下载行为,且中文名、乱码、日期显示异常等问题会集中爆发。核心是正确初始化 PhpSpreadsheet、处理中文字体与日期格式、设置响应头,并确保控制器方法直接输出流。

基础导出:创建表格并写入数据

在控制器中引入命名空间,新建 Spreadsheet 实例,获取活动工作表:

  • 必须使用 SimSun(宋体)作为默认字体,避免“微软雅黑”“黑体”等非 Office 内置字体导致打开时提示替换,影响生产环境稳定性
  • 列宽建议显式设置,如 $sheet->getColumnDimension('A')->setWidth(15),防止内容被截断
  • 表头可批量写入,例如循环 ['A1'=>'ID', 'B1'=>'姓名', 'C1'=>'手机号'],比逐个 setCellValue 更清晰
  • 数据行从第 2 行开始写入,每行按列索引(A/B/C…)或坐标(如 'A2')赋值,注意字符串末尾加 "\t" 可防止数字被 Excel 自动转为科学计数法

防乱码与日期正确显示

两个关键点常被忽略:

图片转Excel
图片转Excel

从图片中提取表格数据并生成Excel文件。当用户提供截图、照片或扫描件中的表格数据,要求转成Excel/xlsx时触发。支持多张图片批量提取,自动识别列结构,数值类型自动识别(Excel可直接计算)。触发词:图片转Excel、截图转表格、图片提取数据、图片转xlsx、image to xlsx、screenshot to spreadsheet。

下载
  • 中文文件名需 rawurlencode 编码,响应头写成:Content-Disposition: attachment; filename="'.rawurlencode('报表_'.date('Y-m-d').'.xlsx').'"
  • 日期字段不能直接 setValue,必须分两步:先用 setValueExplicit(..., TYPE_NUMERIC) 写入时间戳,再用 setFormatCode(FORMAT_DATE_DATETIME) 应用格式码,否则 Excel 显示为 44562 这类序列号

大文件或高并发场景:改用队列异步导出

当数据量超 5000 行或用户并发导出较多时,同步执行易超时、占内存、阻塞请求:

  • 前端点击后,仅插入一条下载任务记录到数据库(如 download 表),返回任务 ID
  • 后端用 TP6 队列(如 Redis + think-queue)消费该任务,生成 Excel 并存至本地或 OSS
  • 前端轮询接口查状态,状态变为“已完成”后提供下载链接,避免用户长时间等待
  • 队列任务中务必关闭调试模式、禁用日志冗余输出,防止内存泄漏

模板填充式导出(推荐用于固定样式报表)

适合带合并单元格、固定表头、条件格式、企业 Logo 的正式报表:

  • 提前准备一个 .xlsx 模板文件(如 public/templates/report_template.xlsx)
  • 用 IOFactory::load($templatePath) 加载,保留所有样式和结构
  • 数据从指定行开始填充(如第 3 行),用 setCellValueByColumnAndRow($col, $row, $value) 精准写入
  • 导出前设置响应头,最后调用 $writer->save('php://output') 直接输出,不落地临时文件

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

excel php 中文乱码

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3168

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4969

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3789

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

466

15

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

2023.07.25

5421

7

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3376

5

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

2023.08.02

3160

3

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

2023.08.02

1444

3

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

2023.08.02

717

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.6万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习