2013-04-12 206 views
3

我正在使用fputcsv($file, $data)以PHP編寫CSV文件。 它一切正常,但我不能在Excel中打開它,但必須導入它並指定編碼和使用哪個分隔符(在嚮導中)。 我見過其他網站的出口,只要點擊它們就能正確打開,現在想知道我應該怎樣做才能實現這一目標。將Excel導出爲Excel

我嘗試使用這個庫:http://code.google.com/p/parsecsv-for-php/ 但我甚至不能讓它運行,我不是很有信心,如果它真的會幫我...

+2

看你的Windows區域配置設置。確保分隔符是逗號。 –

回答

4

儘管CVS的 「C =逗號」,Excel使用您的區域設置本地分隔符。因此假設fputcsv總是使用逗號,如果您的區域設置分隔符是例如分號,則它將不起作用。

可能您提到的其他頁面推斷從Accept-Language HTTP標頭的分隔符。

編輯: 什麼谷歌Adsense的話,當你點擊導出到Excel CSV,是它使用Tab作爲分隔符。那是有效的。

在這兩種情況下,將第三個參數(delimiter)設置爲fputcsv以覆蓋默認逗號。例如。對於標籤使用:fputcsv($handle, $fields, "\t");

絕對比較適用於您的CSV格式與由fputcsv生成的格式。

考慮在你的問題中包括兩個例子。你可能會得到更好的答案。

+0

我已經用Google Adsense解決方法更新了答案 –

+0

更改爲我的語言環境分隔符做到了,謝謝!我會暫時離開接受語言;-) – Alex

+1

試試Google'Tab'解決方案。它可能是與語言環境無關的。 –

3

這真是一團糟。你當然可以使用sep =;或sep =或sep = \ t或其他任何方式使Excel知道CSV中使用的分隔符。只需將此字符串放在CSV內容的開頭。例如:

fwrite($handle, "sep=,\n"); 

fputcsv($handle,$yourcsvcontent); 

這工作順利。但是,如果您需要分別支持特殊字符或MB,則它不能與需要使Excel瞭解UTF-8的BOM結合使用。

最後,爲了讓它防彈,您需要讀出用戶語言環境並相應地設置分隔符,如上所述。 在CSV內容開始時輸入BOM ("\xEF\xBB\xBF"),然後寫入CSV,例如:fputcsv($handle, $fields, $user_locale_seperator); 其中$user_locale_seperator是通過檢查用戶的語言環境檢索到的分隔符。 不舒服,但它的工作原理...

+0

我一直在尋找這一行數週。 fputcsv不適用於spearator,但fwrite可以! – erdomester