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

云浩吖_7732

云浩吖_7732

2026-08-09

177人浏览

原创

使用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;

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

excel-replace
excel-replace

辅助处理excel表格,查找替换单元格内容

下载

第三步:写入表头,逐列设置中文名和自动宽度
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失败会抛出异常。

相关文章

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

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

下载

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

相关专题

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

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

2025.09.04

3210

22

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

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

2023.07.25

6041

7

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

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

2023.07.31

3816

5

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

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

2023.08.02

3600

3

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

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

2023.08.02

1444

3

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

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

2023.08.02

717

5

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

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

2023.08.09

5168

7

java导出excel
java导出excel

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

2023.08.18

7983

6

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

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

2023.08.18

1861

3

热门下载

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

精品课程

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

共162课时 | 45.5万人学习

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

共28课时 | 3.6万人学习