數據導出CSV

public function actionExport(){
        $post = \Yii::$app->request->post();
        $model = new Model();
        $model->load($post, '');
         $list = $model->search();
       
        $filename = '佣金結算彙總';
        $ua = strtolower(\Yii::$app->request->getUserAgent());
        if(preg_match('/(msie|edge|trident)/', $ua)) { //判斷是否爲IE或Edge瀏覽器
            $filename = str_replace('+', '%20', urlencode($filename)); //使用urlencode對文件名進行重新編碼
        }

        header('Content-Type: application/vnd.ms-excel;charset=GB2312');
        header("Content-Disposition: attachment;filename=" . $filename . ".csv");
        $out = fopen('php://output', 'w');
        $titleArr = ['序號', '統計週期', '佣金', '狀態', '日期'];
        $title = $data = [];
        foreach ($titleArr as $temp) {
            $title[] = mb_convert_encoding($temp, 'gb2312', 'utf-8');
        }
        fputcsv($out, $title);
        foreach ($list as $k => $v) {
            $data = [];
            $data[] = $k + 1;
            $data[] = $v['count_date'] . "\t";  //日期不想經過轉換則加”\t“
            $data[] = bcdiv($v['total_allowance'], 100, 2) ."\t";//小數點不被省略,加”\t“
            $data[] = mb_convert_encoding($v['settle_status'] == 1 ? '已結算' : '未結算',  'gb2312', 'utf-8');
            $data[] = date('Y-m-d', $v['settle_at']) ."\t";
            fputcsv($out, $data);
        }

        fclose($out);
        exit;//阻止後續操作輸出到csv
    }

1、導出文件名瀏覽器兼容問題

$filename = '佣金結算彙總';
$ua = strtolower(\Yii::$app->request->getUserAgent());
 if(preg_match('/(msie|edge|trident)/', $ua)) { //判斷是否爲IE或Edge瀏覽器
     $filename = str_replace('+', '%20', urlencode($filename)); //使用urlencode對文件名進行重新編碼
 }

2、日期格式被轉換問題,或小數點被省略,解決辦法 加”\t“

$data[] = date('Y-m-d', $v['settle_at']) ."\t";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章