TP5如何扩展Excel导出函数

千伟君_4173

千伟君_4173

2026-09-20

934人浏览

原创

db::cursor()是大数据导出唯一安全入口;csv须用cursor+fputcsv加bom头,禁用封装;excel须用phpspreadsheet分块fromarray写入,禁逐单元格赋值。

tp5如何扩展excel导出函数

Db::cursor() 是大数据导出的唯一安全入口,别碰 Db::select() TP5 导出 Excel 不是加个包就能跑通的事。内存爆掉、中文变问号、文件打不开——这些问题背后不是代码写错了,而是路径选错了。必须按数据量和格式硬性分路:要 CSV 就彻底放弃 Excel;要 .xlsx 就必须用 PhpSpreadsheet,且不能逐单元格写。

大数据量导出必须用 cursor + fputcsv,禁用任何 Excel 封装

查 5 万行数据进内存再喂给 PhpSpreadsheet,99% 触发 Fatal error: Allowed memory size exhausted。Excel 格式本身不支持流式写入,所有单元格对象都会缓存,1 万行轻松吃掉 300MB 内存。

  • Db::name('user')->cursor() 替代 Db::select(),逐行取,内存恒定在几 MB
  • 输出前必须加 BOM 头:echo "\xEF\xBB\xBF";,否则 Excel 默认 ANSI 解码,中文全成问号
  • 用原生 fputcsv(),别用框架封装的 exportCsv —— 字段顺序、空值转空字符串、引号/换行自动转义都由它兜底
  • ob_end_clean() 必须调用,否则响应体开头混入空白或 HTML,CSV 文件就损坏

小批量且硬要 .xlsx:用 PhpSpreadsheet + fromArray() 分块写入

如果业务明确要求公式、条件格式或合并单元格,PhpSpreadsheet 是唯一靠谱选择。但初始化和写入节奏必须卡死,否则照样崩。

Excel工具(免费版)
Excel工具(免费版)

Excel 文件处理免费版:读写、数据清洗、公式计算与基础统计,支持 xlsx 格式。

下载
  • 禁用计算引擎:$spreadsheet->setCalculationEngine(new \PhpOffice\PhpSpreadsheet\Calculation\Calculation());,否则含公式的文件 CPU 爆表
  • 避免 $sheet->setCellValue('A'.$row, $val) 这种逐单元格赋值,1 万行 = 1 万个 PHP 对象,内存翻倍;改用 fromArray($chunk, null, 'A2') 批量写入
  • 分块写入:每 500 行调一次 ob_flush() 推送缓冲区,$writer->save('php://output') 只在最后调一次
  • 别用 new \PHPExcel() —— 这是已废弃的旧库,TP5.0 官方也不再兼容;composer require phpoffice/phpspreadsheet 是唯一正确安装方式

TP5.0 加载 PhpSpreadsheet 的命名空间写法必须完整

TP5.0 自带类自动加载机制,但 PhpSpreadsheet 的命名空间和目录结构与 TP 规范不完全对齐,直接 use Spreadsheet 会报错。

  • 控制器顶部必须写完整命名空间:use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  • 别在 common.php 里封装全局函数 new Spreadsheet 实例——每次调用都 new 一遍,对象无法复用,内存泄漏更隐蔽
  • 不要把 PhpSpreadsheet 类扔进 vendor/phpexcelLibrary/Vendor 下手动加载,Composer 自动注册的 autoloader 才能保证命名空间映射准确
真正容易被忽略的是:**CSV 和 Excel 是两种完全不同的导出契约**。CSV 是纯文本流,靠 cursor + fputcsv 能无限撑住;Excel 是二进制结构,必须整张表建模完成才能序列化。混用路径,等于在生产环境埋定时炸弹。

相关文章

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

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

下载

相关标签:

excel

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

相关专题

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

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

2023.07.25

4361

7

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

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

2023.07.31

2596

5

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

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

2023.08.02

2400

3

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

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

2023.08.02

1424

3

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

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

2023.08.02

657

5

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

2023.08.09

5108

7

java导出excel
java导出excel

在Java中,我们可以使用Apache POI库来导出Excel文件。本专题提供java导出excel的相关文章,大家可以免费体验。

2023.08.18

5623

6

excel输入值非法
excel输入值非法

在Excel中,当输入的数值非法时,有以下多种处理方法。本专题为大家提供excel输入值非法的相关文章,大家可以免费体验。

2023.08.18

1541

3

excel生成二维码
excel生成二维码

虽然Excel本身并不直接支持生成二维码,但我们可以借助一些插件或宏来实现在Excel中生成二维码的功能。本专题为大家提供excel生成二维码的相关文章。

2023.08.18

2278

4

热门下载

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

精品课程

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

共162课时 | 42.9万人学习

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

共28课时 | 3.5万人学习