为什么在打开.xls文件时显示错误消息

时间:2012-03-21 06:39:16

标签: c# asp.net xls xlsx internet-explorer-5

在我的asp.net,C#应用程序中,我们正在生成并下载.xls文件。但是当我试图打开时,它会给出一条消息

  

“您尝试打开的文件'filename.xls'与其他文件不同   格式比文件扩展名指定的格式。验证文件是否正确   没有损坏,并且在打开文件之前来自受信任的来源。做   你想现在打开文件吗?“

如果我按'是',它就会打开。我将文件扩展名更改为.xlsx,仍然是相同的消息。谁能告诉我为什么会这样?我在IIS管理器中添加了.xlsx MIME类型扩展,MIME类型为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。它仍然显示相同的消息。请建议我如何摆脱它。

6 个答案:

答案 0 :(得分:3)

这个可能是一个旧帖子,但我一直在寻找相同问题的答案,并认为它可能有用。它看起来与应用程序将xls文件提供给浏览器的方式无关。这是Office 2007过度安全性的问题。

微软KB article 948615解释道:

  

在Excel 2007中打开文件时,会收到警告   文件格式与文件扩展名的格式不同   指定。

唯一的解决方案是将en条目添加到客户端的注册表中。我知道对于可能有数百名用户的Web应用程序来说,这不是一个真正的解决方案,但至少你可以在页面上添加一个注释,告诉他们如何解决这个烦人的警告。

答案 1 :(得分:2)

您是完全创建xls文件还是复制并填充模板xls文件? 格式模板文件格式错误可能会导致问题。

此外,您使用什么提供商来填写您的文件?   - 用于xlsx / xlsm的Microsoft.ACE.OLEDB.12.0?   - 适用于xls的Microsoft.Jet.OLEDB.4.0

错误的提供者/扩展名组合可能会导致问题。

根据你的评论,这里是我过去做过的代码的一部分: (评论了一些行,因为我不记得为什么它们有用)

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();

答案 2 :(得分:1)

不确定如何将数据导出到Excel。将DisplayAlerts设置为false可能会有所帮助。

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

我使用互操作DLL。名称空间为Microsoft.Office.Interop.Excel。 请参阅以下链接中的Feng Chen的答案,了解如何添加引用:http://social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

以下链接也可能有所帮助:

http://www.dotnetperls.com/excel

答案 3 :(得分:1)

警报是Excel 2007中称为扩展强化的新安全功能,可确保打开的文件内容与尝试打开文件的shell命令中指定的扩展类型相匹配。 除非URL的扩展名为.HTM / .HTML / .MHT / .MHTML,否则当前设计不允许您从Excel中的网站打开HTML内容。因此,返回HTML并将MIME类型设置为类似XLS的ASP页面试图强制HTML在Excel中打开而不是Web浏览器(如预期的那样)将始终获得安全警报,因为内容与MIME类型不匹配。

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

答案 4 :(得分:0)

您在文件名中使用.xls,在MIME类型中使用.xlsx。尝试使用filname.xlsx。

答案 5 :(得分: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();
                }
     }