加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

YII2框架中excel表格导出的方法详解

发布时间:2021-01-26 21:04:03 所属栏目:PHP教程 来源:网络整理
导读:前言 表格的导入导出是我们在日常开发中经常会遇到的一个功能,正巧在最近的项目中做到了关于表格输出的功能,并且之前用TP的时候也做过,所以想着趁着这次功能比较多样的机会整理一下,方便以后需要的时候,或者有需要的朋友们参考学习,下面话不多说了,来
副标题[/!--empirenews.page--]

前言

表格的导入导出是我们在日常开发中经常会遇到的一个功能,正巧在最近的项目中做到了关于表格输出的功能,并且之前用TP的时候也做过,所以想着趁着这次功能比较多样的机会整理一下,方便以后需要的时候,或者有需要的朋友们参考学习,下面话不多说了,来一起看看详细的介绍:

本文是基于YII2框架进行开发的,不同框架可能会需要更改

一.普通excel格式表格输出

先是最普通的导出.xls格式的表格。首先先看一下表格在网站的显示效果

YII2框架中excel表格导出的方法详解

这里可以看到整个表格一共是7列。下面来看代码的实现。

1.controller文件

public function actionStatistics(){
//设置内存
ini_set("memory_limit","2048M");
set_time_limit(0);

//获取用户ID
$id = Yii::$app->user->identity->getId();

//去用户表获取用户信息
$user = Employee::find()->where(['id'=>$id])->one();

//获取传过来的信息(时间,公司ID之类的,根据需要查询资料生成表格)
$params = Yii::$app->request->get();
$objectPHPExcel = new PHPExcel();

//设置表格头的输出
$objectPHPExcel->setActiveSheetIndex()->setCellValue('A1','代理公司');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('B1','收入');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('C1','成本');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('D1','稿件数');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('E1','毛利(收入-成本)');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('F1','毛利率(毛利/收入)*100%');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('G1','ARPU值');

//跳转到recharge这个model文件的statistics方法去处理数据
$data = Recharge::statistics($params);

//指定开始输出数据的行数
$n = 2;
foreach ($data as $v){
$objectPHPExcel->getActiveSheet()->setCellValue('A'.($n),$v['company_name']);
$objectPHPExcel->getActiveSheet()->setCellValue('B'.($n),$v['company_cost']);
$objectPHPExcel->getActiveSheet()->setCellValue('C'.($n),$v['cost']);
$objectPHPExcel->getActiveSheet()->setCellValue('D'.($n),$v['num']);
$objectPHPExcel->getActiveSheet()->setCellValue('E'.($n),$v['gross_margin']);
$objectPHPExcel->getActiveSheet()->setCellValue('F'.($n),$v['gross_profit_rate']);
$objectPHPExcel->getActiveSheet()->setCellValue('G'.($n),$v['arpu']);
$n = $n +1;
}
ob_end_clean();
ob_start();
header('Content-Type : application/vnd.ms-excel');

//设置输出文件名及格式
header('Content-Disposition:attachment;filename="代理公司统计'.date("YmdHis").'.xls"');

//导出.xls格式的话使用Excel5,若是想导出.xlsx需要使用Excel2007
$objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,'Excel5');
$objWriter->save('php://output');
ob_end_flush();

//清空数据缓存
unset($data);
}

2.model文件

//统计导出
public static function statistics($params){

//导出时间条件
if(empty($params['min'])){
$date_max = date("Y-m-d",strtotime("-1 day"));
$date_min = date("Y-m-d",strtotime("-31 day"));
}else{
$date_min = $params['min'];
$date_max = $params['max'];
}
$where = '';
$where .= '(issue_date BETWEEN '.'''.$date_min.'''.' AND '.'''.$date_max.'')';

//查找指定数据
$sql = 'select
article.company_id,article.cost,article.company_cost
from article WHERE article.status=2 AND '.$where;
$article = Article::findBySql($sql)->asArray()->all();
$article = ArrayHelper::index($article,null,'company_id');
$companys = [];

foreach ($article as $key=>$v){
if(empty($key)){
continue;
}else{
$number = count($v);
$company = Company::find()->where(['id'=>$key])->select('name')->one();
$company_name = $company['name'];
$cost = 0;
$company_cost = 0;
foreach ($v as $n){
$cost += $n['cost'];
$company_cost += $n['company_cost'];
}
if($company_cost == 0){
$company_cost =1;
}

//这里注意,数据的存储顺序要和输出的表格里的顺序一样
$companys[] = [
//公司名
'company_name' => $company_name,//收入
'company_cost' => $company_cost,//成本
'cost' => $cost,//稿件数
'num' => $number,//毛利
'gross_margin' => $company_cost-$cost,//毛利率
'gross_profit_rate' => round(($company_cost-$cost)/$company_cost*100,2).'%',//ARPU值
'arpu' => round($company_cost/$number,2),];
}
}
return $companys;
}
}

最终导出的效果(单元格大小导出后调整过)可以看到和网页显示的基本一样。

YII2框架中excel表格导出的方法详解

二.大数据表格导出

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读