2011-07-29 49 views
2

爲了說明起見,所有這些都發生在本地Intranet上,該網絡在任何時候都不需要連接到Internet。單擊按鈕單擊下載ASP.NET Excel文件

我有一個數據庫運行查詢,之後用戶按下「下載電子表格」按鈕創建/發送電子表格。電子表格的創建工作正常,但經過多次嘗試後,我無法獲取要下載的文件。以下是我已經試過:

  • 修改響應/標題對象
    • 的TransmitFile
    • WriteFile的
    • BinaryStream
    • 重定向
  • JavaScript重定向
    • 響應。寫(Java類CRIPT代碼)

在大多數情況下,其結果是,Excel文件被創建,但不會發生重定向/下載。在Response.Redirect()的情況下,如果它是一個很棒的網站,但是如果它是一個重定向到一個文件:///,那麼它會拋出一個線程異常,但沒有更多的細節。

我懷疑它與ASP.NET文檔的生命週期有關,但恐怕我沒有足夠的經驗足以讓ASP.NET知道這一點。

+0

ContentType是否設置爲您的響應中的application/vnd.ms-excel? – FlyingStreudel

+0

您使用的是什麼版本的ASP.NET/.NET框架? –

+0

是的內容類型,.NET 4 – Itskiddly

回答

14
FileInfo file = new FileInfo(PathToExcelFile); 
if (file.Exists) 
{ 
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
    Response.AddHeader("Content-Type", "application/Excel"); 
    Response.ContentType = "application/vnd.xls"; 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.WriteFile(file.FullName); 
    Response.End(); 
} 
else 
{ 
    Response.Write("This file does not exist."); 
} 
+0

這是我第一次嘗試,因爲它似乎是'正確'的方式來做到這一點,但Response.End()拋出線程中止錯誤。 – Itskiddly

+0

嗯......這是我從一個爲我工作的生產系統中複製的代碼。我想知道爲什麼它不適合你。我會試着弄清楚Response.End()發生了什麼。 –

+0

也許試試這個:http://support.microsoft.com/kb/312629/ –

-2
ClientScript.RegisterStartupScript(GetType(), "hwa", "window.open('" + System.Configuration.ConfigurationManager.AppSettings["WebSite"].ToString() + "Document/SummaryReport/" + FileName + "','_blank');", true); 

是代碼是按鍵點擊Excel文件下載。所以現在很容易用c#代碼下載你的excel文件。

+0

你能詳細說一下你的交流嗎?僅發佈代碼是不夠的。 –