[英]Exporting Gridview to Excel - External table is not in the expected format
这是我的代码,但最终出现意外格式错误。 MIME类型一定有问题,但是我发现这是原始的官方MIME类型。
我想念什么? 每次尝试打开通过此方法创建的任何文档时,似乎都是“损坏的”,但是当我单击该消息时,一切正常。
消息: 您尝试打开的文件'name.ext'与文件扩展名指定的格式不同。 打开文件之前,请验证文件是否未损坏且来自受信任的源。 您要立即打开文件吗?
但是,我需要摆脱此警告,因为我无法导入文件,因为该文件无效。 如果我将文件另存为2003-2007格式.xls,它似乎已修复。 但这不是可行的解决方案。
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+)
以为我会添加评论以供将来参考。 我的一个正在执行TransferSpreadsheet(导出)的宏开始失败,提示“外部表的格式不正确”。 错误窗口。 我转到目标文件的路径并打开了它。 发现最后创建的文件包含“垃圾”字符。 我删除了Excel文件,然后再次运行宏,没有任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.