讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

剧云
剧云

中文短剧剧本制作平台

Yii2.0.55 Excel数据导出配置【报表生成】

云浩吖_7732

云浩吖_7732

发布时间:2026-08-09 19:37:05

|

177人浏览过

|

来源于php中文网

原创

使用phpoffice/phpspreadsheet替代PHPExcel,安装需执行composer require命令并确保PHP≥7.4;导出时通过NumberFormat设置货币格式、中文列名及自动列宽,控制器中可流式下载或生成临时文件。

yii2.0.55 excel数据导出配置【报表生成】

用Yii2.0.55导出财务或业务数据为Excel文件,需避开PHPExcel已废弃的旧写法,改用phpoffice/phpspreadsheet,并确保中文列名、千分位、负数括号、货币符号等格式在导出时正确呈现,否则打开Excel会乱码或数值错位。

安装phpspreadsheet依赖

进入项目根目录,执行:
composer require phpoffice/phpspreadsheet

这一步必须在命令行中运行,不能只改composer.json后手动复制vendor文件——【缺少autoload映射会导致Class 'PhpOffice\PhpSpreadsheet\Spreadsheet' not found】。

若提示“Your requirements could not be resolved”,检查PHP版本是否低于7.4(Yii2.0.55最低要求),或已有冲突包如phpexcel旧版残留,先执行composer remove phpexcel/phpexcel再重试。

创建Excel导出服务类

在common/components/下新建ExcelExporter.php:

第一步:声明命名空间和use语句
namespace common\components;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Style\Alignment;

excel-split
excel-split

辅助处理excel表格,按列拆分大表为多个文件

下载

第二步:定义导出方法,接收$data数组和$columns配置
public static function export($data, $columns = []) {
  $spreadsheet = new Spreadsheet();
  $sheet = $spreadsheet->getActiveSheet();

第三步:写入表头,逐列设置中文名和自动宽度
foreach ($columns as $i => $col) {
  $sheet->setCellValueByColumnAndRow($i + 1, 1, $col['label']);
  $sheet->getColumnDimensionByColumn($i + 1)->setAutoSize(true);
}

第四步:写入数据行,对数值类型启用千分位和负数括号格式
for ($row = 0; $row   foreach ($columns as $i => $col) {
    $value = $data[$row][$col['attribute']] ?? '';
    if (isset($col['format']) && $col['format'] === 'currency') {
      $sheet->getStyleByColumnAndRow($i + 1, $row + 2)
        ->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_USD);
    }
    $sheet->setCellValueByColumnAndRow($i + 1, $row + 2, $value);
  }
}

在控制器中调用导出

方法一:直接响应流式下载
public function actionExport() {
  $data = YourModel::find()->asArray()->all();
  $columns = [
    ['attribute' => 'name', 'label' => '客户名称'],
    ['attribute' => 'amount', 'label' => '金额', 'format' => 'currency'],
  ];
  $file = common\components\ExcelExporter::export($data, $columns);
  $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($file);
  $filename = '报表_' . date('YmdHis') . '.xlsx';
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  header('Content-Disposition: attachment;filename="' . $filename . '"');
  header('Cache-Control: max-age=0');
  $writer->save('php://output');
  exit;
}

方法二:生成临时文件并返回URL(适合大文件)
把$writer->save('php://output')换成:
$path = Yii::getAlias('@runtime/export/') . $filename;
FileHelper::createDirectory(dirname($path));
$writer->save($path);
return $this->redirect(['download', 'file' => basename($path)]);

注意:若使用方法二,需在config/web.php中注册@runtime别名,并确保runtime/export目录存在且web服务器用户有写权限,否则mkdir失败会抛出异常。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

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

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

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

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

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

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

3210

2025.09.04

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

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

6041

2023.07.25

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

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

3816

2023.07.31

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

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

3600

2023.08.02

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

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

1444

2023.08.02

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

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

717

2023.08.02

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

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

5168

2023.08.09

java导出excel
java导出excel

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

7983

2023.08.18

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

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

精品课程

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

共162课时 | 45.5万人学习

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

共28课时 | 3.6万人学习

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

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