• PHP 简易导出excel 类解决Excel 打开乱码


    <?php
    class exportCsv{
    
         //列名
         protected  $_column = array();
         protected  $_reg  = array();
         public     $ret = "";
         
         public function setColumn($colunms){
            
              foreach ($colunms as $k => $colunm){
                  $this->_column[$k] = $colunm['title'];
                  $this->_reg[$k]['reg'] = $colunm['reg'];
                  $this->_reg[$k]['colunm'] = $colunm['name'];
              }
              return $this;
         }
         
         public function bulidData($data){
         
              $this->ret = implode(",", $this->_column);
             foreach($data as $k=>$dat){
                 if(!empty($this->_reg)){
                      $dat = call_user_func_array(array($this, 'doFilter') , array($dat));
                 }
                $this->ret .= " 
    ".implode(",", $dat);
             }
         }
         
         public function transport($name="default"){
             header("Content-Disposition: attachment; filename={$name}.csv");
             header("Content-Type:APPLICATION/OCTET-STREAM");
             $bomHeader = pack('H*','EFBBBF');   //将bom头转换二进制放在所有字符顶部,可以解决office Excel打开是乱码的问题
             die($bomHeader.$this->ret);
         }
         
         private function doFilter($data){
             
             foreach($this->_reg as $k =>$fun){
                if( $data[$fun['colunm']] && method_exists($this,$fun['reg'])){
                   $data[$fun['colunm']] = $this->$fun['reg']($data[$fun['colunm']]);
                }
             }
             return $data;
         }
         
         //格式化时间戳
         private function dataFormate($timestamp){
             return date("Y-m-d",$timestamp);
         }
         //去除换行
         private function htmlFormate($content){
            return str_replace(array("
    ","	
    "), array(" "," "), $content);
         }
    }

    使用方法:

    $columnArr = array(
                   0=>array('title'=>'ID','name'=>'cid'),
                   array('title'=>'用户名','name'=>'uid'),
                   array('title'=>'评论内容','name'=>'comments','reg'=>'htmlFormate'),
                   array('title'=>'评分', 'name'=>'satisfaction', 'reg' =>'int'),
                   array('title'=>'商品编码', 'name'=>'goods_sn', 'reg' =>'int'),
                   array('title'=>'添加时间','name'=>'add_time','reg'=>'dataFormate'),
                   array('title'=>'审核状态','name'=>'status')
               );
               import ( "@.ORG.exportCsv" );
               $csvModel = new exportCsv();
               $csvModel->setColumn($columnArr);
               set_time_limit(0);
               $comments =  $model->table('mall_comments mc')->where($map)->field('cid,uid,comments,satisfaction,goods_sn,add_time,status')->select();
               $csvModel->bulidData($comments);
  • 相关阅读:
    网络分析(二)定向与非定向
    Flex 找不到html文件,不能自动生成html问题解决
    常用的功能点记录
    git常规操作命令整理
    语境驱动测试7原则
    探索式测试的问与答
    测试建模:Google ACC
    探索式测试:基于测程的测试管理(SessionBased Test Management)
    用Excel展示SQL Server中的数据 (III): IronPython与自动化
    在Ajax中使用Flash实现跨域数据读取
  • 原文地址:https://www.cnblogs.com/glory-jzx/p/3277031.html
Copyright © 2020-2023  润新知