2011-12-21 172 views
1

我的數據看起來像這樣(點擊查看頁面源代碼之後),如何將PHP數組寫入xls文件?

date \t new_users \t cpm \t earnings \t total_pushes \t avail_users \t application \t 
2011-03-31 \t 336933 \t $5.27 \t $10151.2 \t 1925244 \t 1905744 \t Play Movies \t 
2011-03-31 \t 205070 \t $5.12 \t $5810.26 \t 1134946 \t 1118354 \t Watch Movies or TV Shows \t 

我爆與「\ T」定的數組,然後動態寫入xls文件.Problem這個是所有的內容只是存在在xls文件的第一列中。

我在代碼中缺少什麼,xls文件是否需要數據格式?

+3

\ t不應該是visble,你應該會看到一個[標籤。此外,這不會是有效的XLS,而是一個TSV文件。但是,如果你展示更多的代碼,我們可以提供更多的幫助。 – 2011-12-21 19:11:33

+0

@saratis是對的。檢查你的代碼,看看你是否圍繞'\ t'使用雙引號或單引號。它應該是「雙引號」。 – FakeRainBrigand 2011-12-21 19:24:12

+0

$ glue ='\ t'; $ h = array('date','news','cpm','earnings','pushes','count','app'); $ top = implode(「$ glue」,$ h)。「\ n」; $ d =陣列( \t '0'=>數組( '2011', '3', '5.2', '10151.2', '1925244', '1905744', '播放電影'), \t「1 '=> array('2011','2','35.2','10151.2','1134946','1118354','觀看電影或電視節目') \t ); $ f_c =''; foreach($ d as $ ed){ \t $ cs = null; $ cs = implode(「$ glue」,array_values($ ed)); $ f_conts。= $ s。 「\ n」 個; } $ f_cs = $ top。$ F_C; $ f ='s.xls'; header(「Content-type:application/vnd.ms-excel」); header(「Content-disposition:filename =」。$ f); print_r($ fn) – 2011-12-21 19:51:48

回答

1

看起來你並不想寫XLS而是CSV(逗號分隔值)格式。如果是這種情況,請將\t替換爲,(或;),並用雙引號(")將所有值字段(不是列標題)換行。

Excel應該可以處理格式化的CSV文件,而不會出現問題。

如果您確實想生成XLS文件,請嘗試生成一個包含您的數據的HTML表格。把該表的HTML代碼到一個單一變量,使用下面的代碼下載爲自動將XLS文件:

// Just some example data in a HTML table 
$htmlcontent = "<table><tr><th>col1</th><th>col2</th></tr><tr><td>val1-1</td><td>val1-2</td></tr></table>"; 

// Create as XLS file and send to browser for download 
$filename ="data.xls"; 
header('Content-type: application/ms-excel'); 
header('Content-Disposition: attachment; filename='.$filename); 
echo $htmlcontent; 

這樣一來,用戶可以下載內容爲Excel中應該是一個XLS文件能夠處理得很好。

(PS,你可以嘗試使用\t - 分隔數據文件的內容,而不是一個HTML表格,可以工作,但我不知道所以給它一個去。)

2

爲了產生有效的XML你可以使用fe PHPExcel

如果您對簡化格式表示滿意,則可以生成csv文件格式。這對於開放或MS Office來說已經足夠了。 對於csv把內置的內容簡單地放到一個文件中,或使用fputcsv函數

3

您應該使用fputcsv來構建文件。你不必擔心設置分隔符。那麼你應該把文件重命名爲something.xls。

如果你從一個Web請求處理此,添加以下標題:應用程序/ vnd.ms - Excel中

<?php 
// create header array here...$myHeaders 
// create data array here... $myData 

$csvName = 'temp.csv'; 

$fp = fopen($csvName, 'w'); 
fputcsv($fp, $myHeaders); 
foreach ($myData as $line) { 
    fputcsv($fp, $line); 
} 
fclose($fp); 

// now send to browser if this is a web request 
$csvData = file_get_contents($csvName); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Length: ' . strlen($csvData)); 
echo $csvData; 
exit;