一直以為PHP導(dǎo)出excel需要用PhpSpreadsheet或者PHPExcel這類插件,但其實原生PHP也可以導(dǎo)出excel,而且非常簡單。
<?php
header("Content-type:application/vnd.ms-excel",charset=UTF8-Bom);
header("Content-Disposition:attachment;filename=test.xls");//test.xls為文件名字
$tab="\t";
$br="\n";
$head="編號".$tab."備注".$br;
//輸出內(nèi)容如下:
echo $head.$br;
echo "test321318312".$tab;
echo "string1";
echo $br;
echo "330181199006061234".$tab; //直接輸出會被Excel識別為數(shù)字類型
echo "number";
echo $br;
?>
上面的代碼會導(dǎo)出下面的excel
| 編號 | 備注 |
|---|---|
| test321318312 | string1 |
| 330181199006061234 | number |
需要注意的問題
1.長數(shù)字會自動變成科學(xué)計數(shù)法
我們輸出330181199006061234這樣的長數(shù)字時,excel會顯示成3.30E+17這種科學(xué)計數(shù)法,但是類似身份證號碼、手機號碼這樣的數(shù)字,需要直接顯示出來。
//在excel會直接顯示
echo "=\"330181199006061234\"".$tab;
echo '="'.$PhoneNumber.'"';
所以只需要在長數(shù)字前面加 =" 后面加" 就可以了
2.中文的編碼問題
中文會變成一串亂碼,是因為導(dǎo)出的excel文件默認(rèn)是utf8,沒有帶BOM的, 微軟會將其當(dāng)作GBK打開,中文就會亂碼。
所以我們需要在header頭指定文件的編碼為UTF8-Bom。
header("Content-type:application/vnd.ms-excel",charset=UTF8-Bom");
參考
https://www.zhihu.com/question/23392439
https://cloud.tencent.com/developer/article/1090648