代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Lott

如何在ASP.NET中生成Excel2007文件而不收到警告消息?

  •  1
  • Jeffrey Lott  · 技术社区  · 15 年前

    每当我用Excel2007打开在我的ASP.NET页面上生成的XLS文件时,都会收到以下错误:

    您试图打开的文件“filename.xls”位于另一个 文件扩展名指定的格式。验证文件是否为 未损坏,在打开文件之前来自受信任的源。做 你想现在打开文件吗?

    如果我点击“是”,一切看起来都很好,但是每次点击都会让我们的客户感到恼火。如果他们使用2003,没问题,但是在2007年它给出了这个错误。这是我使用的代码:

    string style = @"<style> .text { mso-number-format: \@ } </style> ";
    
    Response.Clear();
    Response.AddHeader("content-disposition", string.Format("attachment;filename=OperationsReport_Rejects_{0}.xls", DateTime.Today.ToString("yyyyMMdd")));
    Response.Charset = "";
    Response.ContentType = "application/vnd.xls";
    
    StringWriter stringWrite = new StringWriter();
    HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
    reportOperationsRejectsGridView.RenderControl(htmlWrite);
    Response.Write(style);
    Response.Write(stringWrite.ToString());
    Response.End();
    

    有人知道是什么导致它在2003年和2007年表现不同吗?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Guffa    15 年前

    Office2007使用的基于XML的文件格式与以前的二进制文件格式不同。

    Excel2007保存的不是 .xls 文件,但是 .xlsx 文件。

    你所创造的事实上两者都不是。这是Excel文件的HTML导出。有些版本会无缝地将HTML导入为Excel文档,有些版本会在导入之前警告您它实际上不是Excel文档。

    如果你创建一个 XLS 文件Excel2007将以兼容模式打开它,不会有任何抱怨。

        2
  •  0
  •   Ken White    15 年前

    Excel2003和2007使用不同的格式,除非用户专门执行“另存为”并选择向后兼容的格式。

    在十六进制查看器或十六进制编辑器中快速查看将显示文件格式的巨大差异。

        3
  •  0
  •   Joe Erickson    15 年前

    SpreadsheetGear for .NET 可以另存为真实的XLS或XLSX工作簿-避免此错误消息。

    您可以在我们的Excel报告示例页面上看到许多实时示例。 here 下载免费试用版 here .

    免责声明:我拥有SpreadsheetGear LLC

    推荐文章