10

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

“您尝试打开的文件 'filename.xls' 的格式与文件扩展名指定的格式不同。在打开文件之前,请确认文件没有损坏并且来自受信任的来源。您要打开现在的文件?”

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

4

6 回答 6

4

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

Microsoft 的知识库文章 948615 对此进行了解释:

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

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

于 2013-01-11T10:20:50.883 回答
2

您是完全创建 xls 文件还是复制并填写模板 xls 文件?不正确的格式模板文件可能会导致问题。

另外,您使用什么提供商来填写您的文件?- Microsoft.ACE.OLEDB.12.0 用于 xlsx/xlsm 吗?- 适用于 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();
于 2012-03-21T08:37:36.193 回答
2

文件扩展名 .xls(2003 版)支持 HTML 布局,而 office 2007 及更高版本不支持。

您必须将 excel 文件导出为 .xlsx格式。根据我的经验,它将在所有版本中支持它。

将以下 DLL 添加到 bin 文件夹中

  • 关闭XML.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();
                }
     }
于 2017-10-12T07:08:32.523 回答
1

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

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

我使用互操作 DLL。命名空间将是Microsoft.Office.Interop.Excel. 有关如何添加参考,请参阅以下链接中陈风的回答:http: //social.msdn.microsoft.com/Forums/en/netfxsetup/thread/c9e83756-4ae2-4ed4-b154-1537f3bb3a22

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

http://www.dotnetperls.com/excel

于 2012-03-21T06:56:11.320 回答
1

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

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

于 2013-07-01T11:10:39.960 回答
0

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

于 2012-03-21T06:48:31.407 回答