数据导出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";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章