2012-03-19 80 views
2

我使用ASP MVC3框架,創建一個Excel文件並使用FileResult操作輸出它,內容類型爲「application/vnd.openxmlformats-officedocument.spreadsheetml.sheet」 。Excel不想打開通過ASP輸出下載的XLSX文件

試圖打開它時Excel只是說「文件已損壞,無法打開」。

當我打開源代碼生成的Excel文件,用於發送輸出,它沒有任何問題。我也對兩個副本的字節進行文件比較,文件是相同的。我試圖將損壞的文件發送給我自己,附件打開正常。

這使我相信這是一個頭文件或某種Excel/Windows安全配置的問題。

如果是後者,那麼我需要一個不會讓客戶端更改其安全設置的解決方案。

編輯 - 找到設置:

我發現了什麼設置導致此 - 「啓用保護的視圖從文件來源於互聯網」在Excel的信任中心/受保護的視圖設置。

所以我想問題是 - 有沒有辦法使文件顯示可信?

下面是響應頭:

  • 緩存控制:私人
  • 內容處置:附件;
  • 文件名= 「報告 - 週一,3月19日,2012.xlsx」 內容長度:20569
  • 內容類型:應用程序/ vnd.openxmlformats-officedocument.spreadsheetml.sheet

的操作方法可使輸出:

[HttpPost] 
public virtual FileResult Export() 
    { 
     try 
     { 
      ... 
      string newFilePath = createNewFile(...); 
      string downloadedFileName = "Report - " + DateTime.Now.ToString("D") + ".xlsx"; 
      return File(newFilePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", downloadedFileName); 

     } 
     catch (Exception ex) 
     { 
      ... 
     } 
    } 

如何創建Excel文件:

我有一個模板XLSX文件女巫列名和其他工作表中的一些透視圖。從C#創建這個模板的副本,然後調用SQL Server的使用OLEDB連接器,其輸出數據到第1張:

set @SQL='insert into OPENROWSET(''Microsoft.ACE.OLEDB.12.0'', ''Excel 12.0;Database=' +  @PreparedXLSXFilePath + ';'', ''SELECT * FROM [Data$]'') ... 

預先感謝任何幫助。

+0

你是如何創建Excel文件?根據您的使用情況,這可能有所幫助:http://www.jwgoerlich.us/blogengine/post/2009/08/11/Excel-Extension-Hardening-and-Web-Applications.aspx – 2012-03-20 00:39:49

+0

找到有問題的設置 - 更新有問題。我需要找到一種方法來讓文件在客戶端沒有任何工作的情況下被信任。 – 2012-03-20 11:34:47

回答

0

您需要在Excel文件中進行數字簽名。如何從代碼做到這一點是另一個問題。

此處瞭解詳情:

http://www.delphifaq.com/faq/windows_user/f2751.shtml

+0

謝謝,我會在今天晚些時候看看。 – 2012-03-20 12:02:21

+0

祝你好運:)證書應該是信任的,否則客戶端將不會接受它(或需要安裝在客戶的個人商店)。 – 2012-03-20 13:07:13

+0

好的,我研究了數字簽名,但有1個主要問題 - 你不能在不影響簽名的情況下修改文件。這甚至不讓數據透視表刷新,我希望客戶端可以使用提供的數據。 – 2012-03-21 11:31:24