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);
    }
    }
  • 相关阅读:
    CCF NOI1032 菱形
    CCF NOI1031 等腰三角形
    CCF NOI1030 角谷猜想
    CCF NOI1029 信息加密
    CCF NOI1028 判断互质
    CCF NOI1027 数字之和
    CCF NOI1026 表演打分
    CCF NOI1025 统计奖牌
    CCF NOI1024 因子个数
    CCF NOI1023 最大跨度
  • 原文地址:https://www.cnblogs.com/lmpxs/p/6256684.html
Copyright © 2011-2022 走看看