2014-11-15 70 views
0

我需要創建和excel文件並從aspx頁面下載它。我創建了一個簡單的頁面(default.aspx),其上有一個按鈕(「Button1」)。這裏是default.aspx.cs文件從ASPX創建和下載Excel文件頁

using System; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string content = ""; 
     content += "<head>"; 
     content += "</head>"; 
     content += "<body>"; 
     content += "<table>"; 
     content += "<tr>"; 
     content += "<th>foo</th>"; 
     content += "</tr>"; 
     content += "</table>"; 
     content += "</body>"; 
     content += "</html>"; 
     Response.AppendHeader("Content-Type", "application/vnd.ms-excel"); 
     Response.AppendHeader("Content-disposition", "attachment; filename=test.xls"); 
     Response.Write(content); 
    } 
} 

當我運行這段代碼,然後點擊它的按鈕,其實農產品和Excel在單元格A1測試「foo」的文件。問題是,我從IE以下錯誤消息:

error message displayed by Excel

我在做什麼錯?我如何生成文件,以便它不會導致顯示錯誤消息?

+0

應該是應用程序/ vnd.ms-excel而不是application/vmd.ms-excel(vmd - > vnd) – 2014-11-15 00:13:44

+0

Maxim,是的,你是對的。但這並不能解決問題。我正在更新代碼以反映此更正。 – JonnyBoats 2014-11-15 00:18:02

+0

如果這是一個重複的問題,請您提供一個鏈接,回答這個問題的答案?被認爲是重複的鏈接問題不會問「我如何生成文件,以便它不會導致顯示錯誤消息?「更重要的是沒有回答這個問題。 – JonnyBoats 2014-11-15 03:13:16

回答

0

您不能隱式創建Excel文件作爲HTTP響應。您基本上有兩種選擇:

  1. 以Excel可以讀取的格式創建響應,如逗號分隔(CVS)。
  2. 使用服務器端API以編程方式創建Excel文件並將其作爲附件發回。

如果您選擇第一個選項,當在Excel中打開文件時,您將繼續獲得此彈出窗口。但是,該文件將在Excel中打開。

第二個選項可能會花費你的錢。我曾經工作的一家名爲SoftArtisans是誰寫的名爲ExcelWriter的API,將你需要的東西:

http://www.officewriter.com/officewriter-free-evaluation.aspx

他們的主要競爭對手是閱讀Aspose,其產品被稱爲的Aspose.Cells。我沒有親自使用過,但他們有自己的忠實客戶,所以我以爲該產品是罰款:

http://www.aspose.com/docs/display/cellsnet/Aspose.Cells

+2

或者使用/學習非常自由的[OpenXML SDK](http://www.microsoft.com/en-us/download/details.aspx?id=5124)到[生成Excel工作簿](http://msdn.microsoft .com/en-us/library/office/hh180830%28v = office.14%29.aspx) – ethorn10 2014-11-15 00:44:30

+0

我並不反對這個建議,特別是如果它是一個簡單的工作簿。如果你想寫xls文件格式,但這不是一個選項 – maniak1982 2014-11-15 00:49:25

+1

對於將來的讀者,上述建議避免使用Office Interop。從ASP.NET或其他服務器技術使用Office Interop是一個可怕的想法。這些API是爲在桌面應用程序中使用而編寫的,用於自動化Office(一套桌面應用程序)在許多方面,陽離子都是不同的,因此在它們中使用Office Interop是非常非常糟糕的主意。它也不受Microsoft的支持,並可能違反您的Office許可證。請參閱[有關Office的服務器端自動化的注意事項](http://support.microsoft.com/kb/257757) – 2014-11-15 00:52:39

1

HTML是不是一個Excel工作簿。

當Excel打開文件時,它不考慮或信任文件擴展名,因爲它可以由用戶任意更改 - 而是打開任何文件並查找某些模式(例如,Excel 2007+ OOXML文件以字符PK。CSV文件定期有逗號,舊的Excel文件有它們自己的二進制格式和「魔術字」等)

就你而言,Excel打開文件,將其檢測爲HTML,並將其讀爲一個HTML表格並將其轉換爲電子表格。您的代碼實際上並未發送「真實」的Excel工作簿 - 因此您的MIME類型完全不正確。

如果你想要一些總是「正常工作」的東西,我建議讓用戶以CSV格式下載數據,這有利於在Microsoft Excel,Apple數字,OpenOffice Calc和跨平臺中開放' 記事本。確保你的服務爲text/csv