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