2013-09-30 60 views
2

我將使用PHP將SQL中的數據導出到Excel(csv)。我可以將所有數據從SQL導出到Excel,但它是未知的日語。現在,我可以解決它;但其他問題是關於SQL中的每一行都將導出到Excel中的一列中。導出到Excel(CSV)通過PHP將數據從MySQL導出到Excel(csv)

A     
1 ccode,country 
2 US,United State 
3 UK,United Kingdom 
4 FR,France 
5 KO,Korea 
6 JP,東京 

這裏是我的代碼

例子(SQL數據)

ccode country 
US  United State 
UK  United Kingdom 
FR  France 
KO  Korea 
JP  東京 

<?php 

header("Content-type: text/csv; charset=UTF-8"); 
header('Content-Disposition: attachment; filename=Export.csv'); 
//connection 
$con = mysql_connect('localhost', 'root', ''); 
if(!$con){ 
    echo "Error connection"; 
} 
//select db 
$select_db = mysql_select_db('country', $con); 
if(!$select_db){ 
    echo "Error to select database"; 
} 
mysql_set_charset("utf8", $con); 

//Mysql query to get records from datanbase 
$user_query = mysql_query('SELECT * FROM countries'); 

//While loop to fetch the records 
$contents = "ccode,country\n"; 
while($row = mysql_fetch_array($user_query)) 
{ 
    $contents.=$row['ccode'].","; 
    $contents.=$row['country']."\n"; 
} 

$contents_final = chr(255).chr(254).mb_convert_encoding($contents, "UTF-16LE","UTF-8"); 
print $contents_final; 

?> 

以下是我出口後要到Excel(CSV)

A   B 
1 ccode  country 
2 US   United State 
3 UK   United Kingdom 
4 FR   France 
5 KO   Korea 
6 JP   東京 

誰能幫我解決這個問題?我很感激你的幫助!

提前致謝。

回答

-2

您需要將列與;分開,而不是,。名稱'逗號分隔值'在這裏有點誤導。所以你會寫:

while($row = mysql_fetch_array($user_query)) 
{ 
    $contents.=$row['ccode'].";"; 
    $contents.=$row['country']."\n"; 
} 
+0

@downvoters:這有什麼問題? – TheWolf

+0

它不起作用,它變成「英國;英國」 – user2738520

+0

分隔符實際上是在MS Excel中特定於語言環境;所以一個標籤可以在某些地方使用,在其他地方使用分號。沒有通用的解決方案;儘管如果你使用'sep =;'作爲第一行將會有所幫助;作爲分隔符 –

3

你在做什麼已經是正確的。在Excel中導入csv文件時,請指定分隔符是逗號。或者,使用製表符作爲分隔符代替逗號。

+0

現在有效。感謝您的幫助:) – user2738520

+0

標記爲已回答。 – Tarik

0

你真的不應該在做手動創建CSV的業務。這裏

//While loop to fetch the records 
fputcsv('php://output', array('ccode','country')); 
while($row = mysql_fetch_array($user_query, MYSQL_NUM)) { 
    array_walk($row, function(&$item) { 
      $item = mb_convert_encoding($item, "UTF-16LE","UTF-8"); 
    } 
    fputcsv('php://output', $row); 
} 

請注意,我也做的每個單獨的字段值編碼步驟:考慮使用fputcsv()做到這一點。

使用此方法的好處是,它將根據需要正確包含所有字段,以防止某些值破壞您的CSV格式。例如,如果其中一個數據庫值包含,,則您的方法會中斷,而使用適當的csv創建機制可以解決這個問題。

這種方法的另一個附加好處是,如果你有一大組數據,這將使用更少的內存,因爲你一次只能在內存中保存一行數據(在你輸出並移動之前到下一個數據行)。

+0

我會測試你的代碼。謝謝! – user2738520

0

使用\ t爲$ content變量獲取excel表格中不同列的數據