TP5.0源生Excel導出

PHPExcel類在TP5裏邊並不能很好的兼容,使用起來很麻煩。php

不像是tp3.2那樣直接import()加進來就能new,由於它裏邊的命名空間找不到。老是說undefined class。數據庫

若是是使用composer安裝的PHPExcel的話可能好點吧。數組

由於我是下載下來後直接放到extend裏邊使用的,感受不是很好用。app

因此爲了方便直接寫的源生的導出。composer

tp5在更新了一次以後說明文檔上標明,若是可以不使用DB類的狀況下不要使用DB類,儘可能使用模型進行CURD操做。優化

可是若是用源生的php代碼來導出的話又不能避免,由於須要切割數組。excel

因此只有用DB類查詢出來的數據是數組。若是不使用DB類的話,查詢出來的都是對象。並不能很好的去操做。雖然有toArray(),可是有的對象又不支持轉換成數組。真尷尬啊!但願tp5在之後的更新中可以優化好 :) 。對象

不廢話了,直接上代碼吧。文檔

/*
*
* 商品Excel導出
*
* @author hechengwei <chichiooo@sina.com>
* @version 1.0.0
* @date 2016年12月16日 下午15:47:34
* */
public function goodsExcelExport(){
$data = Db::name('goods')
->field('id_sys_goods,goods_sn,goods_name,cat_id,unit_name,fk_business_area')
->order('id_sys_goods asc')
->select();
foreach($data as $k => $v){
$data[$k]['cat_id'] = Db::name('goods')
->join(config('database.prefix').'category c','c.id = sys_goods.cat_id')
->where('c.id',$v['cat_id'])
->value('c.cat_name');
$data[$k]['fk_business_area'] = Db::name('goods')
->join(config('database.prefix').'business_area b','b.id_business_area = sys_goods.fk_business_area')
->where('b.id_business_area',$v['fk_business_area'])
->value('b.bname');
}
$excelName = '商品信息';
$Header = array('商品id','商品貨號','商品名稱','商品分類','單位名稱','商圈');
$goodsModel = new GoodsModel();
$goodsModel->exportexcel($data,$Header,$excelName);
}

/** *@author hechengwei <chichiooo@sina.com> *@version 1.0.0 *@date 2016年12月16日 下午16:10:22 *導出數據爲excel表格 *@param $data    一個二維數組,結構如同從數據庫查出來的數組 *@param $title   excel的第一行標題,一個數組,若是爲空則沒有標題 *@param $filename 下載的文件名 *@examlpe *$stu = new Model(); *$arr = $stu -> select(); *exportexcel($arr,array('id','帳戶','密碼','暱稱'),'文件名!'); */public static function exportexcel($data=array(),$title=array(),$filename='report'){   header("Content-type:application/octet-stream");   header("Accept-Ranges:bytes");   header("Content-type:application/vnd.ms-excel");   header("Content-Disposition:attachment;filename=".$filename.date("Y-m-d").".xls");   header("Pragma: no-cache");   header("Expires: 0");   //導出xls 開始   if (!empty($title)){      foreach ($title as $k => $v) {         $title[$k]= $v;      }      $title= implode("\t", $title);      echo "$title\n";   }   if (!empty($data)){      foreach($data as $key=>$val){         foreach ($val as $ck => $cv) {            $data[$key][$ck]= $cv;         }         $data[$key]=implode("\t", $data[$key]);      }      echo implode("\n",$data);   }}
相關文章
相關標籤/搜索