【问题标题】:Why showing error message while opening .xls file为什么在打开 .xls 文件时显示错误消息
【发布时间】:2012-03-21 06:39:16
【问题描述】:

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

"您尝试打开的文件 'filename.xls' 位于不同的 格式比文件扩展名指定的格式。验证文件是 在打开文件之前未损坏并且来自受信任的来源。做 你想现在打开文件吗?”

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

【问题讨论】:

  • 请说明您是如何生成 XLS 的?是不是Excel XML格式,那么扩展名应该是xml。
  • 你要什么代码?
  • 该文件是一个扩展名为.xls的excel文件

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


【解决方案1】:

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

微软的KB article 948615 解释它:

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

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

【讨论】:

    【解决方案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();
    

    【讨论】:

    • 我正在创建 .xls 文件。起初,我使用 sqlserver 数据库中的 sql 查询来获取数据。然后我在 GridView 中填充数据。之后使用 StringWriter 和 HtmlTextWriter 我正在编写 string attachment = " filename=" + File.xls; Response.ClearContent(); Response.AddHeader("内容配置", 附件); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; GridView1.RenderControl(htw); Response.Write(sw.ToString());响应。结束();这样我就生成了 excel 文件。
    • 你的代码和我的类似。但是您的代码也显示了相同的消息。
    • 有没有其他方法可以从sql server数据创建excel文件?
    • 我猜你的html渲染字符串应该只有一个HTML表格代码(......
      ) ,否则会失败。首先,尝试导出一个包含两行两列 html 表格代码的 const 字符串。还有其他导出到 Excel 的方法(我建议的 OleDb/Jet 连接,Office Interop,...)我敢打赌,这个网站上的很多主题都可以解决这些问题
    【解决方案3】:

    文件扩展名 .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();
                    }
         }
    

    【讨论】:

      【解决方案4】:

      不确定如何将数据导出到 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

      【讨论】:

      • 使用 Excel.Application 的命名空间是什么?
      • 添加该 dll 会产生很多问题。它甚至不允许我打开项目本身..所以....
      • 也许你应该提到你是如何在你的代码中导出 excel 的。
      • 我不建议照顾这个答案,在很多层面都是错误和错误的
      【解决方案5】:

      警报是 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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 我在 MIME 类型中尝试了这两个扩展。它显示相同的消息。
        猜你喜欢
        • 2017-10-02
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2018-05-11
        • 2013-09-14
        • 2019-08-02
        相关资源
        最近更新 更多