副问题[/!--empirenews.page--]
媒介
表格的导入导出是我们在一般开拓中常常会碰着的一个成果,正巧在最近的项目中做到了关于表格输出的成果,而且之前用TP的时辰也做过,以是想着趁着这次成果较量多样的机遇清算一下,利便往后必要的时辰,可能有必要的伴侣们参考进修,下面话不多说了,来一路看看具体的先容:
本文是基于YII2框架举办开拓的,差异框架也许会必要变动
一.平凡excel名目表格输出
先是最平凡的导出.xls名目标表格。起首先看一下表格在网站的表现结果

这里可以看到整个表格一共是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;
}
}
最终导出的结果(单位格巨细导出后调解过)可以看到和网页表现的根基一样。

二.大数据表格导出
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|