前言
表格的导入导出是我们在日常开发中经常会遇到的一个功能,正巧在最近的项目中做到了关于表格输出的功能,并且之前用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);
}







