繁体   English   中英

将Gridview导出到Excel-外部表格式不正确

[英]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+)

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

以为我会添加评论以供将来参考。 我的一个正在执行TransferSpreadsheet(导出)的宏开始失败,提示“外部表的格式不正确”。 错误窗口。 我转到目标文件的路径并打开了它。 发现最后创建的文件包含“垃圾”字符。 我删除了Excel文件,然后再次运行宏,没有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM