导出Gridview到Excel – 外部表格不是预期的格式

这是我的代码,但最终我意外的格式错误。 MIMEtypes必须有错误,但是我发现这是一个原始的官方MIMEtypes。

我错过了什么? 每次我试图打开任何文件,我创build的这个方法似乎是“腐败”,但是当我点击消息一切正常。

消息: 您尝试打开的文件“name.ext”与文件扩展名指定的格式不同。 打开文件之前,validation该文件是否已损坏并且来自受信任的来源。 你想现在打开文件吗?

但是,我需要摆脱这个警告,因为我无法导入文件,因为它是无效的。 如果我将文件保存为2003-2007格式的.xls,它似乎是固定的。 但是这不是一个可行的解决scheme。

protected void ExportToExcel(string fileName) { var cmd = new SqlCommand(query); var dt = GetData(cmd); var writer = new StringWriter(); var gridview = new GridView(); gridview.AllowPaging = false; gridview.DataSource = dt; gridview.DataBind(); Response.Clear(); var hw = new HtmlTextWriter(writer); gridview.RenderControl(hw); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); // this.EnableViewState = false; Response.Write(writer.ToString()); // Response.Flush(); Response.End(); } 

直接的,你不是做excel出口。 您正在发送带有假响应头的HTML表格,诱使浏览器使用excel打开此内容。

这可能会在很多方面失败,实际上可以被解释为恶意行为。 我认为这样做只是在呼唤麻烦。

更好的办法是使用本地的Excel库,并做出口。 以下是将DataTable导出为真正的Excel文件(2007+)的示例

https://stackoverflow.com/a/9569827/351383

以为我会为未来的参考添加评论。 我正在做TransferSpreadsheet(导出)的一个macros开始失败,给“外部表格不是预期的格式”。 错误窗口。 我去了目标文件的path,并打开它。 发现最后创build的文件包含“垃圾”字符。 我删除了Excel文件,并再次运行我的macros没有问题。