PHP將查詢的數(shù)據(jù)導(dǎo)出為CSV文件

要點(diǎn):

1.header頭的設(shè)置,正確的設(shè)置可以防止導(dǎo)出的csv文件內(nèi)容出現(xiàn)亂碼
2.有了正確的header頭設(shè)置不需要再去使用iconv函數(shù)去轉(zhuǎn)換字符編碼
3.輸出文件名的設(shè)置(這個(gè)會(huì)體現(xiàn)在代碼中)
4.逐行取數(shù)據(jù),防止數(shù)據(jù)過(guò)多造成內(nèi)存溢出等的問(wèn)題
5.計(jì)數(shù)器和buffer刷新閾值的設(shè)定
6.fputcsv()函數(shù)的使用;
7.ob_flush()函數(shù)和flush()函數(shù)的使用;

代碼簡(jiǎn)單易懂,因?yàn)閹缀趺啃卸加凶⑨?/h5>
public function exportCsv($data){
        //設(shè)置header頭信息
        header('Content-Encoding: UTF-8');
        header('Content-Type: text/csv; charset=UTF-8');
        header('Content-Type: application/vnd.ms-excel');
        $file_name = date('YmdHis').'.csv';
        header('Content-Disposition: attachment;filename="'.$file_name.'"');

        // 打開(kāi)PHP文件句柄,php://output 表示直接輸出到瀏覽器
        $fp = fopen('php://output', 'a');

        //設(shè)置csv文件表頭
        $table_header = array('券碼','核銷金額','訂單號(hào)','核銷時(shí)間','商品名稱','核銷員');

        // 將數(shù)據(jù)通過(guò)fputcsv寫(xiě)到文件句柄
        fputcsv($fp, $table_header);
        //計(jì)數(shù)器
        $cnt = 0;
        //buffer刷新間隔
        $flush = 500;
        //逐行取出數(shù)據(jù)
        $count = count($data);
        for ($i = 0;$i<$count;$i++){
            //刷新一下輸出buffer,防止由于數(shù)據(jù)過(guò)多造成問(wèn)題
            if($flush == $cnt){
                ob_flush();
                flush();
                $cnt = 0;//重置計(jì)數(shù)器
            }
            $row = $data[$i];//根據(jù)主鍵逐行取數(shù)據(jù)
            $row['virtual_code'] = '='.'"'.$row['virtual_code'].'"';//防止這個(gè)值被excel自動(dòng)轉(zhuǎn)換所作的處理
            $row['virtual_time'] = '='.'"'.$row['virtual_time'].'"';//防止這個(gè)值被excel自動(dòng)轉(zhuǎn)換所作的處理
            //將數(shù)據(jù)格式化為CSV,并寫(xiě)入文件指針
            fputcsv($fp,$row);
            $cnt += 1;
        }
        //關(guān)閉打開(kāi)的文件
        fclose($fp);
    }
補(bǔ)充
  • 導(dǎo)出的數(shù)據(jù)比如比較長(zhǎng)的純數(shù)字,日期在Excel中會(huì)被自動(dòng)轉(zhuǎn)換,如下圖


    純數(shù)字被轉(zhuǎn)換.png
日期被轉(zhuǎn)換.png
解決辦法:
  • 在不希望被自動(dòng)轉(zhuǎn)換的值前邊拼接加上=號(hào),比如:
    時(shí)間可以這么處理:
    =2018-7-12(注意等于號(hào))
效果:
純數(shù)字的效果.png
時(shí)間的效果.png
over
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容