2012-03-21 65 views
9

在我的asp.net錯誤消息,C#應用中,我們生成和下載.xls文件。但是,當我試圖打開,它給消息爲什麼顯示在打開.xls文件

「你試圖打開,‘filename.xls’的文件,是不是由文件擴展名指定的不同 格式驗證文件是 沒有損壞,並且在打開文件之前來自可信來源。是否 您想要立即打開文件?

如果我按「是」它的開幕。我將文件擴展名更改爲.xlsx,但仍然是相同的消息。誰能告訴我爲什麼會發生這種情況?我在IIS管理器中添加了.xlsx MIME類型擴展名,其MIME類型爲application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。它仍然顯示相同的信息。請建議我如何擺脫它。

+0

請發送代碼 – 2012-03-21 06:40:58

+0

請顯示您如何生成XLS?它是Excel XML格式,那麼擴展名應該是xml。 – 2012-03-21 06:42:51

+0

你要求什麼代碼? – Sukanya 2012-03-21 06:42:59

回答

1

你完全創建XLS文件或做你複製並填寫一個模板xls文件? 不正確的格式模板文件可能會導致此問題。

此外,什麼提供商,你用填寫你的文件嗎? - 適用於xlsx/xlsm的Microsoft.ACE.OLEDB.12.0? - Microsoft.Jet.OLEDB.4.0 for xls?

一個不正確的提供商/延伸組合可能會導致問題。

根據您的意見,這裏是代碼的一部分,我已經做了,在過去的: (註釋某些行的,我不記得你爲什麼他們在那裏有用)

Response.Clear();       
Response.ContentType = "application/vnd.ms-excel"; 
//Response.ContentEncoding = Encoding.Default; 
//Response.Charset=""; 
Response.AddHeader("Content-Disposition: ", 
    String.Format(@"attachment; filename={0}",myfileName)); 

//EnableViewState = false; 

Response.Write(myFileContentAsString); 
Response.Flush(); 
Response.Close(); 
+0

我創建.xls文件。起初我從sqlserver數據庫中使用sql查詢獲取數據。然後我在GridView中填充數據。之後使用StringWriter和HtmlTextWriter我正在寫字符串附件=「文件名=」+ File.xls; Response.ClearContent(); Response.AddHeader(「content-disposition」,附件); Response.ContentType =「application/vnd.openxmlformats-officedocument.spreadsheetml.sheet」; GridView1.RenderControl(HTW); Response.Write(sw.ToString()); Response.End();這樣我就生成了excel文件。 – Sukanya 2012-03-21 08:50:18

+0

你的代碼與我的相似。但是你的代碼也顯示了相同的信息。 – Sukanya 2012-03-21 09:43:38

+0

是否有任何其他方式從sql server數據創建excel文件? – Sukanya 2012-03-21 09:44:21

0

您正在使用的文件名和.XLSX的.xls的MIME類型。嘗試使用filname.xlsx。

+0

我在MIME類型中嘗試了兩種擴展。它顯示了相同的信息。 – Sukanya 2012-03-21 06:56:41

1

不知道你是如何將數據導出到Excel。將DisplayAlerts設置爲false可能會有所幫助。

xlApp = new Excel.Application(); 
xlApp.DisplayAlerts = false; 

我使用interop DLL。命名空間將是Microsoft.Office.Interop.Excel。 見陳楓在關於如何添加引用下面的鏈接答案:http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

以下鏈接也可能幫助:

http://www.dotnetperls.com/excel

+0

什麼是使用Excel.Application的命名空間? – Sukanya 2012-03-21 07:01:07

+0

添加該dll創建了很多問題。它甚至不允許我打開項目本身..所以...... – Sukanya 2012-03-21 07:43:05

+0

也許你應該提到你如何在代碼中導出excel。 – Manoj 2012-03-21 08:24:33

3

這一個可能是一箇舊帖子,但我一直在尋找相同問題的答案,並認爲它可能有用。它看起來與您的應用程序將xls文件提供給瀏覽器的方式無關。這是Office 2007過度安全問題。

微軟的KB article 948615解釋它:

當您打開在Excel 2007中的文件時,您收到 文件格式從格式不同的警告文件擴展名 指定。

唯一的解決方案是將en條目添加到客戶端的註冊表中。我知道這對於一個Web應用程序來說可能並不是一個真正的解決方案,可能有數百個用戶,但至少您可以在頁面中添加一個註釋,告訴如何修復這個惱人的警告。

1

該警報是Excel 2007中一項名爲「擴展強化」的新安全功能,它可確保打開的文件內容與試圖打開該文件的shell命令中指定的擴展類型相匹配。 當前的設計不允許您在Excel中從網站打開HTML內容,除非URL的擴展名是.HTM/.HTML/.MHT/.MHTML。因此,返回HTML並將MIME類型設置爲XLS等嘗試強制HTML在Excel中而不是Web瀏覽器中打開的HTML頁面(如預期的那樣)將始終獲得安全警報,因爲內容與MIME類型不匹配。

http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/03/11/excel-2007-extension-warning.aspx

0

文件擴展名的.xls(版本2003)支持HTML佈局,而Office 2007和以上的版本不支持它。

您必須將excel文件導出爲.xlsx格式。從我的經驗來看,它會支持所有版本。

添加下面的DLL到bin文件夾

  • ClosedXML.dll
  • DocumentFormat.OpenXml.dll

代碼導出文件的.xlsx

DataTable dt = new DataTable(); 
    //Create column and inser rows 
    using (XLWorkbook wb = new XLWorkbook()) 
    {   
       var ws = wb.Worksheets.Add(dt, Sheetname); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Charset = ""; 
       HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx"); 
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream); 
        HttpContext.Current.Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
    } 
相關問題