0

这是我的代码,但最终出现意外的格式错误。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();
    }
4

2 回答 2

2

直截了当,您没有进行 excel 导出。您正在发送带有虚假响应标头的 html 表,以欺骗浏览器使用 excel 打开此内容。

这可能会以多种方式失败,实际上可以解释为恶意行为。我认为这样下去只会招惹麻烦。

更好的方法是使用本机 excel 库并使用它进行导出。这是将 DataTable 导出到真实 excel 文件的示例(2007+)

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

于 2013-09-06T10:46:43.140 回答
1

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

于 2014-01-21T16:46:57.433 回答