2016-04-07 71 views
0

當我生成我的csv文件時,某些特殊字符和單元格值的前零位沒有得到。請諮詢如何解決這個問題laravel csv,如何獲得帶前置零的csv文件

public function csv() 
    { 
     // $table = Festivals::all(); 
     $headers = [ 
      'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0' 
      , 'Content-type' => 'text/csv' 
      , 'Content-Disposition' => 'attachment; filename=sss.csv' 
      , 'Expires' => '0' 
      , 'Pragma' => 'public' 
     ]; 

       $list = Festivals::select('ref_no','artist_name','postal_address','payment','payment_fee','bank_details','bank_name','bank_address','account_name','account_number','sort_code','reg_vat','vat_reg_number' 
,'foreign_artise','name_desg','email','mobile','name_address','vehicle_size','backline','additional_backline','name','date')->get()->toArray(); 


     # add headers for each column in the CSV download 
     array_unshift($list, array_keys($list[0])); 

     $callback = function() use ($list) { 
      $FH = fopen('php://output', 'w'); 
      foreach ($list as $row) { 
       fputcsv($FH, $row); 
      } 
      fclose($FH); 
     }; 

     return Response::stream($callback, 200, $headers); 
    } 

編輯 enter image description here

+0

你會閱讀的價值觀爲整數,但爲了保持一定要仔細閱讀他們作爲字符串左零。 – Laerte

+0

@Laerte:我該怎麼做?我將所有值存儲爲VARCHAR –

+0

老實說,我不知道你的代碼是如何工作的,但是我從JSON導入時遇到了同樣的問題。爲了解決這個問題,我將數據庫列從整數更改爲字符串。 – Laerte

回答

1

塔魯,

嗯,我不知道你的數據看起來像在這一點上有什麼:fputcsv($FH, $row);

不過,我我會做出一些假設,我們可以從那裏開始。

首先,在$row數組中可能已經缺少零。但現在,請添加此上述fputcsv($FH, $row);

foreach ($row as $key => $val) { 
    $row[$key] = '="'.str_replace('"', '\"', $val).'"'; 
} 

請參閱多少給你。如果它仍然不能正常工作,請告訴我一行當前輸出,並讓我知道它有什麼問題。

編輯

我的意思是要做到這一點:

$callback = function() use ($list) { 
    $FH = fopen('php://output', 'w'); 
    foreach ($list as $row) { 
     foreach ($row as $key => $val) { 
      $row[$key] = '="'.str_replace('"', '\"', $val).'"'; 
     } 
     fputcsv($FH, $row); 
    } 
    fclose($FH); 
}; 
+0

你我這樣放這個:foreach($ row as $ key => $ val){$ key ='=''。str_replace(''','\'',$ val)。「 「; fputcsv($ FH,$ row); } –

+0

我得到此行的語法錯誤$ row [$ key] ='=''。str_replace(''','\'',$ val)。「'; –

+0

我檢查了我的初始代碼,當我print_r $ callback我得到的所有值與前導零。並在下載文件後,當我在記事本上打開它仍然有領先零...問題出現時,它在Excel中打開:(請教 –