您的位置:首页 > 编程语言 > PHP开发

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

2013-08-23 10:44 323 查看
<?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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: