讲师中心 微信公众号
AI工具推荐 视频效率加速

TP5如何扩展Excel导出函数

千伟君_4173

千伟君_4173

发布时间:2026-09-20 09:44:04

|

934人浏览过

|

来源于php中文网

原创

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 是二进制结构,必须整张表建模完成才能序列化。混用路径,等于在生产环境埋定时炸弹。

相关文章

相关标签:

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

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

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

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

4361

2023.07.25

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

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

2596

2023.07.31

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

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

2420

2023.08.02

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

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

1424

2023.08.02

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

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

657

2023.08.02

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

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

5108

2023.08.09

java导出excel
java导出excel

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

5623

2023.08.18

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

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

1541

2023.08.18

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

热门下载

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

精品课程

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

共162课时 | 42.9万人学习

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

共28课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn