久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

YII2框架中excel表格導出的方法詳解

最近在研究PHP的Yii框架,很喜歡,碰到導出Excel的問題,研究了一下,就有了下面這篇文章,這篇文章主要給大家介紹了關于YII2框架中excel表格導出的相關資料,文中通過示例代碼介紹的

前言

表格的導入導出是我們在日常開發(fā)中經(jīng)常會遇到的一個功能,正巧在最近的項目中做到了關于表格輸出的功能,并且之前用TP的時候也做過,所以想著趁著這次功能比較多樣的機會整理一下,方便以后需要的時候,或者有需要的朋友們參考學習,下面話不多說了,來一起看看詳細的介紹:

本文是基于YII2框架進行開發(fā)的,不同框架可能會需要更改

一.普通excel格式表格輸出

先是最普通的導出.xls格式的表格。首先先看一下表格在網(wǎng)站的顯示效果

YII2框架中excel表格導出的方法詳解

這里可以看到整個表格一共是7列。下面來看代碼的實現(xiàn)。

1.controller文件

//導出統(tǒng)計

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之類的,根據(jù)需要查詢資料生成表格)
 $params = Yii::$app->request->get();
 $objectPHPExcel = new \PHPExcel();

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

 //跳轉到recharge這個model文件的statistics方法去處理數(shù)據(jù)
 $data = Recharge::statistics($params);

 //指定開始輸出數(shù)據(jù)的行數(shù)
 $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="代理公司統(tǒng)計'.date("YmdHis").'.xls"');

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

 //清空數(shù)據(jù)緩存
 unset($data);
}

2.model文件

 <?php
 namespace app\models;//model層的命名空間
 //注意要引用yii的arrayhelper
 use yii\helpers\ArrayHelper;
 use Yii;
 class Recharge extends \yii\db\ActiveRecord
 {
 //excel一次導出條數(shù)
 const EXCEL_SIZE = 10000;
 
 //統(tǒng)計導出
 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.'\')';

 //查找指定數(shù)據(jù)
 $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;
 }

 //這里注意,數(shù)據(jù)的存儲順序要和輸出的表格里的順序一樣
 $companys[] = [
 //公司名
 'company_name' => $company_name,

 //收入
 'company_cost' => $company_cost,

 //成本
 'cost' => $cost,

 //稿件數(shù)
 '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;
 }
}
【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學習交流,請勿用于商業(yè)用途。如損害你的權益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要給大家介紹了關于php中通用的excel導出方法的相關資料,通過文中介紹的方法對大家學習或者使用php具有一定的參考學學習價值,需要的朋友們下面隨著小編來一起學習學習
Yii2的rule用于對模型屬性進行驗證,scenario用戶定義不同場景下需要驗證的模型,下面這篇文章主要給大家介紹了關于Yii2中場景(scenario)和驗證規(guī)則(rule)的相關資料,文中通過示例代碼介
本篇文章主要介紹了淺談使用 Yii2 AssetBundle 中 $publishOptions 的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了Yii2之組件的注冊與創(chuàng)建的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
下面小編就為大家?guī)硪黄猋ii2使用駝峰命名的形式訪問控制器(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 国产激情毛片 | 成人免费av在线 | 欧美精产国品一二三区 | 成人免费视频观看视频 | 九九热精品在线 | 国产精品亚洲精品 | 亚洲国产一区二区三区在线观看 | 国产二区视频 | 男插女下体视频 | 亚洲乱码国产乱码精品精的特点 | 久久久九九 | 欧美男人天堂 | 精品亚洲一区二区三区四区五区高 | 视频一区二区三区在线观看 | 在线成人免费视频 | 国产欧美在线 | 少妇av片| 国产精品久久久久久久7电影 | 91观看| 成人在线视频网 | 狠狠综合久久av一区二区老牛 | 日韩欧美精品在线播放 | 久久久久久91香蕉国产 | 久久色视频 | 精品欧美 | 精品一区二区三区日本 | 久久久久久久久久久久久久国产 | 成人欧美一区二区三区在线观看 | 国产黄色av电影 | 国产乱码精品一区二区三区忘忧草 | 久久久久九九九九 | 视频在线一区二区 | 久久性| 99免费视频 | 国产精品一区在线 | 久久精品99国产精品 | 国产免费一区二区三区网站免费 | 亚洲一区二区三区高清 | 久久91 | 中文在线一区 | 日日夜夜天天 |