
正文
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);







