zoukankan      html  css  js  c++  java
  • TP5.0源生Excel导出

    PHPExcel类在TP5里边并不能很好的兼容,使用起来很麻烦。

    不像是tp3.2那样直接import()加进来就能new,因为它里边的命名空间找不到。总是说undefined class。

    如果是使用composer安装的PHPExcel的话可能好点吧。

    因为我是下载下来后直接放到extend里边使用的,感觉不是很好用。

    所以为了方便直接写的源生的导出。

    tp5在更新了一次之后说明文档上标明,如果能够不使用DB类的情况下不要使用DB类,尽量使用模型进行CURD操作。

    但是如果用源生的php代码来导出的话又不能避免,因为需要切割数组。

    所以只有用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(" ", $title);
    echo "$title ";
    }
    if (!empty($data)){
    foreach($data as $key=>$val){
    foreach ($val as $ck => $cv) {
    $data[$key][$ck]= $cv;
    }
    $data[$key]=implode(" ", $data[$key]);
    }
    echo implode(" ",$data);
    }
    }
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/lmpxs/p/6256684.html
Copyright © 2011-2022 走看看