每当我打开使用Excel 2007在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年表现不同?
答案 0 :(得分:4)
Office 2007使用与以前的二进制文件格式不同的基于XML的文件格式。
Excel 2007保存的文件不是.xls
文件,而是.xlsx
文件。
你创造的实际上并非如此。它是excel文件的HTML导出。有些版本会将HTML无缝导入为excel文档,有些版本会在导入之前警告你它实际上不是Excel文档。
如果您创建一个实际的.xls
文件,Excel 2007将以兼容模式打开它而不会抱怨。
答案 1 :(得分:0)
Excel 2003和2007使用不同的格式,除非用户专门执行“另存为”并选择向后兼容的格式。
快速查看十六进制查看器或十六进制编辑器将显示文件格式的巨大差异。
答案 2 :(得分:0)
SpreadsheetGear for .NET可以保存为真正的xls或xlsx工作簿 - 避免出现此错误消息。
您可以在我们的Excel报告示例页面here上查看大量实时示例,并下载免费试用here。
免责声明:我拥有SpreadsheetGear LLC