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 .= " \n".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("\n","\t\n"), 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);

 

你可能感兴趣的:(导出Excel)