PHPExcel类在TP5里边并不能很好的兼容,使用起来很麻烦。
不像是tp3.2那样直接import()加进来就能new,因为它里边的命名空间找不到。总是说undefined class。
如果是使用composer安装的PHPExcel的话可能好点吧。
因为我是下载下来后直接放到extend里边使用的,感觉不是很好用。
所以为了方便直接写的源生的导出。
tp5在更新了一次之后说明文档上标明,如果能够不使用DB类的情况下不要使用DB类,尽量使用模型进行CURD操作。
但是如果用源生的php代码来导出的话又不能避免,因为需要切割数组。
所以只有用DB类查询出来的数据是数组。如果不使用DB类的话,查询出来的都是对象。并不能很好的去操作。虽然有toArray(),但是有的对象又不支持转换成数组。真尴尬啊!希望tp5在以后的更新中能够优化好 :) 。
不废话了,直接上代码吧。
/* * * 商品Excel导出 * * @author hechengwei <[email protected]> * @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 <[email protected]> *@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); }}
时间: 2024-12-25 03:00:48