laravel excel 匯出亂碼
阿新 • • 發佈:2019-02-12
在使用laravel excel 匯出excel資料時,xls格式會出現亂碼
一種解決辦法是 匯出格式變成csv
另外一種就是使用 ob_end_clean
附上自己使用laravel-admin封裝的通用匯出方法:針對頁面的顯示匯出對應資料
public function export() {$file_name = date("Y-m-d") .'-'. $this->grid->model()->eloquent()->getTable(); Excel::create($file_name, function($excel) use ($file_name) { $model_name= get_class($this->grid->model()->eloquent()); $excel->sheet($file_name, function($sheet) use ($model_name) { $name = []; $label = []; foreach ($this->grid->columns() as $k => $v) { $name[] = $v->getName(); $label[] = $v->getLabel(); } $data =$this->getData(); $rows = []; foreach ($data as $k => $v) { $rows[] = array_dot($this->sanitize($v)); } $rows = collect($rows)->map(function($item) use ($name) { return array_only($item, $name); }); $rows = $this->sort_arr($rows, $name, $model_name); //dump($name); //dd($rows);$sheet->row(1, $label); $sheet->rows($rows); ob_end_clean(); }); })->export('xls');//csv }
/** * Remove indexed array. * * @param array $row * * @return array */ protected function sanitize(array $row) { return collect($row)->reject(function ($val) { return is_array($val) && !Arr::isAssoc($val); })->toArray(); } /** * @param $arr * @param $keys * @param $model_name * @return array */ public function sort_arr($arr, $keys, $model_name) { $new_arr = []; foreach ($arr as $k => $v) { foreach ($v as $kk => $vv) { if (stripos($kk, '.')) { list($l1, $l2) = explode('.', $kk); if(method_exists($l1,'_gird_'.$l2)) { $v[$kk] = call_user_func_array([ucwords($l1), '_gird_'.$l2], [$vv]); } } else { if(method_exists($model_name,'_gird_'.$kk)) { $v[$kk] = call_user_func_array([$model_name, '_gird_'.$kk], [$vv]); } } } foreach ($keys as $kk => $vv) { $new_arr[$k][$vv] = $v[$vv]; } } //dd($new_arr); return $new_arr; }