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";