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

ThinkPHP8.0Excel数据导出_ThinkPHP8.0导出Excel表格教程【功能】

雨丽君_5553

雨丽君_5553

发布时间:2026-06-29 16:24:00

|

534人浏览过

|

来源于php中文网

原创

ThinkPHP 8.0 导出 Excel 必须用 phpoffice/phpspreadsheet,因 PHPExcel 已废弃且不兼容 PHP 8.0+,强行使用会报 Class 'PHPExcel' not found 或方法签名不兼容错误;其最后版仅支持 PHP 7.2,而 phpspreadsheet 是官方继任者,API 兼容但底层重写。

thinkphp8.0excel数据导出_thinkphp8.0导出excel表格教程【功能】

ThinkPHP 8.0 导出 Excel 必须用 phpoffice/phpspreadsheet,PHPExcel 已废弃且不兼容 PHP 8.0+,硬上会直接报 Class 'PHPExcel' not found 或 Declaration of ... must be compatible with ... 错误。

为什么不能继续用 PHPExcel

PHPExcel 在 2016 年已停止维护,其最后稳定版(1.8.2)仅支持到 PHP 7.2;TP8 默认要求 PHP 8.0+,而 phpspreadsheet 是它的官方继任者,API 兼容但底层完全重写。常见错误包括:

  • Fatal error: Declaration of PhpOffice\PhpSpreadsheet\Reader\Xlsx::canRead($pFilename) must be compatible with PhpOffice\PhpSpreadsheet\Reader\IReader::canRead($filename)
  • Call to undefined method PhpOffice\PhpSpreadsheet\Spreadsheet::getActiveSheetIndex()(旧代码混用新类)

所有基于 PHPExcel 的 ThinkPHP 扩展(如 Org/Util/PHPExcel.class.php)在 TP8 中均不可用,强行 require 会触发 autoloader 冲突。

composer 安装与基础导出结构

执行安装命令,注意不要加 --dev(导出是运行时依赖):

立即学习“PHP免费学习笔记(深入)”;

Hotnews Excel
Hotnews Excel

当用户发送热点新闻Excel文件时,自动执行相应操作。触发词:skill, 优化, 数据, data。

下载
composer require phpoffice/phpspreadsheet

导出逻辑应封装为独立服务类(非控制器内硬编码),核心步骤如下:

  • 实例化 PhpOffice\PhpSpreadsheet\Spreadsheet
  • 获取当前 sheet:$sheet->getActiveSheet()(不是 getSheet(0))
  • 表头写入:用 setCellValue('A1', '姓名') 或批量循环 + ord() 计算列字母
  • 数据写入:逐行遍历数组,避免用 toArray() 反向生成(性能差、内存溢出风险高)
  • 设置响应头强制下载,**必须禁用输出缓冲**:ob_end_clean(); 否则返回空文件或乱码

导出中文乱码和样式丢失的根源

不是字体问题,而是默认编码和单元格格式未显式声明:

  • 中文显示异常 → 每个单元格需调用 getStyle()->getFont()->setName('SimSun')(Windows)或 'Noto Sans CJK SC'(Linux/macOS),否则 fallback 到无中文字体的 DejaVu
  • 数字被转成科学计数 → 对数值列(如手机号、ID)提前设置单元格格式:getStyle('B2:B1000')->setNumberFormatCode('@')(文本格式)
  • 自动换行失效 → 需同时设置:getAlignment()->setWrapText(true) + getRowDimension($row)->setRowHeight(-1)
  • 导出后 Excel 提示“发现不可读内容” → 未调用 $writer->save('php://output') 而用了 file_put_contents 写临时文件再读取(破坏流完整性)

TP8 原生导出方法推荐写法

避免封装过度,直接在控制器中轻量调用(适合中小数据量):

$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// 写表头
$header = ['ID', '姓名', '邮箱', '创建时间'];
foreach ($header as $col => $title) {
    $cell = chr(65 + $col) . '1';
    $sheet->setCellValue($cell, $title);
    $sheet->getStyle($cell)->getFont()->setBold(true);
}

// 写数据(假设 $data 是二维数组)
$row = 2;
foreach ($data as $record) {
    $col = 0;
    foreach ($record as $value) {
        $cell = chr(65 + $col) . $row;
        $sheet->setCellValueExplicit($cell, $value, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
        $col++;
    }
    $row++;
}

// 设置响应头
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="export_' . date('Ymd_His') . '.xlsx"');
header('Cache-Control: max-age=0');

$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save('php://output');
exit;

关键点:setCellValueExplicit(..., TYPE_STRING) 强制字符串类型,防止长数字(如身份证)被转义;exit 必须紧跟 save('php://output'),中间不能有 echo/print/debug 输出。

最易忽略的是导出前的输出缓冲清理和字符类型强制——这两项不处理,90% 的“导出失败”“文件损坏”“中文变方块”问题就出在这里。

热门AI工具

更多
豆包大模型

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

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

WorkBuddy

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

Lovart
Lovart Hot

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

DeepSeek

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

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

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

相关专题

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

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

5121

2023.07.25

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

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

3156

2023.07.31

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

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

2960

2023.08.02

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

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

1444

2023.08.02

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

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

697

2023.08.02

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

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

5148

2023.08.09

java导出excel
java导出excel

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

6703

2023.08.18

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

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

1701

2023.08.18

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

100

2026.10.10

热门下载

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

精品课程

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

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