2009-06-10 133 views
2

我不是PHP專家(僅僅是初學者),但需要一些幫助!將mySQL導出爲ex​​cel或csv

經過幾小時搜索谷歌並嘗試了大約100個不同的腳本,我終於找到了一個能夠滿足我需要的東西 - 差不多。

基本上,我的網站有一個標記爲「導出到Excel」的按鈕。訪問者點擊網站按鈕,下載開始包含來自指定表格的所有數據。

我發現這個在這裏 - PHP code to convert a MySQL query to CSV

這不正是我想要的只是用戶會看到試圖打開文件時出現以下錯誤:

錯誤 - 「您要的文件打開「export.xls」的格式與文件擴展名指定的格式不同。在打開文件之前,驗證該文件是否已損壞並且來自受信任的來源。我想現在打開文件?'

用戶單擊'是',文件將打開所有數據!輝煌!除用戶將不會打開此錯誤的文件。

如果有人知道解決此問題的方法,我將不勝感激。

非常感謝

TT

+0

是您使用Office 2007的用戶嗎?你有沒有嘗試過頭(「ContentType:application/vnd.ms-excel」)? – Perpetualcoder 2009-06-10 17:46:04

+0

@TheTub檢查出http://stackoverflow.com/questions/976483/exporting-gridview-to-excel-in-web-app/976566#976566爲另一個線程處理這個相同的問題。 – 2009-06-10 17:48:24

+0

- 是的標題已經說明了內容類型。 – TheTub 2009-06-10 18:11:09

回答

5

或者,您可以在上述解決方案中更改腳本以返回.csv擴展名的文件。 .csv文件與Excel關聯,因此應直接打開。

2

好了,這導致從Excel 2007中指定的功能,稱爲擴展硬化。您可以關閉它,但只能在客戶端完成。如果點擊「確定」或「是」,文件仍然會打開。有關更多信息,請檢查this blog post

編輯:這是什麼意思是Excel發現該文件是不同類型的(如HTML或CSV)文件擴展名指定的內容。因此,Excel想警告你,這個文件不是它所說的。除非要在服務器上創建本機Excel文件,否則會提示用戶下載它們,除了每個用戶在其自己的計算機上關閉Extension Hardening之外,沒有繞過此錯誤的辦法。

0
Dim objXL As Excel.Application 
Dim objWkb As Excel.Workbook 
Set objXL = New Excel.Application 
'turn off excel warnings 
objXL.DisplayAlerts = False 
'Open the Workbook 
Set objWkb = objXL.Workbooks.Open(fpath) 
0
functions sendFile($filename,$content_type="application/ms-excel") { 
    header('Content-type: '.$content_type); 
    header('Content-disposition: Attachment; filename=' . $filename); 
    readfile($filename); 
} 
0

我有同樣的問題,所以我看了看下面的鏈接:PHP code to convert a MySQL query to CSV

我修改了答案,以獲得頭工作之一。

include('DBFILE.PHP'); 
$select="SELECT * FROM SOMETable"; 


$result = mysqli_query($conn, $select); 
if (!$result) die('Couldn\'t fetch records'); 
$num_fields = mysql_num_fields($result); 

//This is what I changed... 
$headers =""; 
while ($property = mysqli_fetch_field($result)) { 
    $headers.= $property->name.","; 
} 
$headers.="\n"; 
////// 

$fp = fopen('php://output', 'w'); 
if ($fp && $result) { 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    fputcsv($fp, $headers); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) { 
     fputcsv($fp, array_values($row)); 
    } 
    die; 
} 

我測試了這一點,它的工作原理就像一個魅力,你只需要添加你的數據庫連接,或者包括您有db.php中的文件。

如果編輯下面一行

header('Content-Disposition: attachment; filename="export.csv"'); 

更改出口什麼都命名你喜歡,你可以更改文件的名稱。