2013-06-27 19 views
0

我通過使用標題機制的下載概念將MySQL列數據導出到excel文件中。問題是,如果text作爲其datatype的列包含breaklines的數據,如enumeration那麼csv文件很奇怪:枚舉的數據放在excel文件的不同行中。那麼如何讓數據放置在一個單元格內?當MySQL列數據有斷線時,Excel數據很奇怪

下面是下載的代碼:

function downloadFile($outPut, $fileName){ 

     $filesize = strlen($outPut); 

     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-type: text/enriched"); 
     header("Content-length: $filesize"); 
     header("Content-disposition: attachement; filename=$fileName"); 

     ob_clean(); 
     flush(); 

     print($outPut); 

     exit(); 
    } 
+0

也許,告訴我們什麼文件格式,你是在談論(「Excel文件「當Excel有幾種不同的文件格式時,這是一個非常無意義的陳述)我猜你的意思是一個CSV,因爲它的標籤是:你使用fputcsv()嗎? –

+0

你使用fputcsv() –

+0

建議你改變你的方式按照我在我的答案中建議的方式編寫數據;使用php://輸出作爲文件名,並按照我在downloadFile函數中顯示的構建輸出,而不是簡單地通過預格式化的 –

回答

0

髒的方法是使用「\ r \ n」作爲CSV文件結束實際行;和一個簡單的「\ n」作爲單元格內的分隔線,確保引用包含分隔線的任何單元格值。

$fh = fopen('test.csv', 'w+'); 
fwrite($fh, "sep=\t" . "\r\n"); 
fwrite($fh, 'A' ."\t" . 'B' . "\t" . 'C' . "\r\n"); 
fwrite($fh, 'D' ."\t" . "\"E\nF\nG\"" . "\t" . 'H' . "\r\n"); 
fclose($fh); 

本示例使用單元格之間的製表符分隔符;並顯示在單元格B2三線值

編輯

或者使用fputcsv()

$fh = fopen('test2.csv', 'w+'); 
fwrite($fh, "sep=\t" . PHP_EOL); 
fputcsv($fh, array('A', 'B', 'C'), "\t"); 
fputcsv($fh, array('D', "E\nF\nG", 'H'), "\t"); 
fclose($fh); 
1

我的第一個建議是,以確保每個要導出的字段是內雙引號如果他們還沒有,這將節省很多格式問題,例如在一個字段中包含逗號等等。如果你仍然有問題,我會建議嘗試用你將解釋爲新行(或空格)的東西來替換換行符。在SQL試試這個(周圍的字段,AY有換行符:如果你解釋什麼是「下載概念」實際上意味着

REPLACE(your_column_name,'\n',' ')