如有雷同超歌,算你抄襲。
通過引入第三方類phpexcel可以很方便的導(dǎo)出excel,但是實(shí)踐下來切平,生成excel的效率并不高握础,只是單純的做數(shù)據(jù)分析用excel并不明智,最好還是用csv悴品,導(dǎo)出csv的方法極簡單禀综,CSV是一種分隔的 文本文件,它使用逗號來分割值(許多CSV導(dǎo)入/導(dǎo)出工具的實(shí)現(xiàn)也允許使用其它的分隔符)苔严。 簡單的CSV實(shí)現(xiàn)可以禁止字段值中包含逗號或其它特殊字符如換行符定枷。
我們只要簡單幾行代碼就可以實(shí)現(xiàn)
function export_csv($filename,$data)
{
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
echo $data;
}
$arr = array(
? ? ? ? ? ? ?array('name'=>'小明','age'=>20,'city'=>'北京'),
? ? ? ? ? ? ? array('name'=>'麗莎','age'=>15,'city'=>'河北'),
);
$str = "姓名,年齡,城市\(zhòng)n";//表頭
foreach($arr as $row)
{
$str .= $row['name'].','.$row['age'].','.$row['city']."\n";
}
export_csv('測試csv',$str); //導(dǎo)出
以上代碼就可以實(shí)現(xiàn)導(dǎo)出,但是我們發(fā)現(xiàn)導(dǎo)出的csv是亂碼届氢,所以我們需要做一次轉(zhuǎn)碼
這里不賣關(guān)子欠窒,直接貼出我目前為止遇到的需要做處理的字符
"\r\n", "\r", "\n",這幾個都是換行符,不過濾掉會導(dǎo)致CSV亂行
"," 逗號在CSV中作為分隔符,也會導(dǎo)致亂行
"\"" 雙引號這個問題是早上剛發(fā)現(xiàn)的岖妄,會導(dǎo)致csv換行失效型将,過濾掉吧
此外,
if (preg_match("/[\x7f-\xff]/", $str)) 這里判斷是否匹配漢字荐虐,
如果是七兜,我們將他轉(zhuǎn)為gbk2312才能在csv中正常顯示,
如果轉(zhuǎn)完是個空字符串,我們將原字符串轉(zhuǎn)成gbk格式福扬,
做這一步是為了處理繁體字腕铸,繁體字需要轉(zhuǎn)成gbk,否則不顯示
```
function gb2312($str)
{
$str = str_replace(array("\r\n", "\r", "\n",",","\""), array("","","","&",""), $str);
if (preg_match("/[\x7f-\xff]/", $str))
{
$inconvStr = iconv('utf8',"gbk2312",$str);
$inconvStr = empty($inconvStr)?iconv('utf8',"gbk",$str):$inconvStr;
}
return $inconvStr;
}
以上 ,是本帖的核心內(nèi)容铛碑,如有雷同狠裹,算你抄襲。
導(dǎo)報表遇到最棘手的問題莫過于汽烦,數(shù)據(jù)太多導(dǎo)致內(nèi)存泄露或超出maxexcutetime涛菠,
希望下次可以與大家分享如何應(yīng)對這些問題的方法。