0

嗨,我正在尝试将网格数据导出到 excel,但它在 IE8 中不起作用。我正在使用包含 2 个按钮“确定”和“关闭”的 Ajax 模态弹出对话框。点击确定,我想下载 excel 文件。它可以工作在 Mozilla 中很好,但在 IE 中它不起作用。我正在使用下面的代码。请建议我该怎么做?另外,当我首先打开文件时,它会在打开文件之前显示警告如何处理?

  Response.Clear();
    Response.Buffer = true;

    string filename = "Checkout";
     Response.Charset = "";
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment; filename=" + filename + ".adt");

    Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
    Response.Write("<head>");
    Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">");
    Response.Write("<!--[if gte mso 9]><xml>");
    Response.Write("<x:ExcelWorkbook>");
    Response.Write("<x:ExcelWorksheets>");
    Response.Write("<x:ExcelWorksheet>");
    Response.Write("<x:Name>Sheet1</x:Name>");
    Response.Write("<x:WorksheetOptions>");
    Response.Write("<x:Print>");
    Response.Write("<x:ValidPrinterInfo/>");
    Response.Write("</x:Print>");
    Response.Write("</x:WorksheetOptions>");
    Response.Write("</x:ExcelWorksheet>");
    Response.Write("</x:ExcelWorksheets>");
    Response.Write("</x:ExcelWorkbook>");
    Response.Write("</xml>");
    Response.Write("<![endif]--> ");
    Response.Write("</head>");

    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView gv = new GridView();
    gv.AutoGenerateColumns = true;
    gv.DataSource = dt;
    gv.DataBind();
    gv.RenderControl(hw);

    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
4

1 回答 1

0

您会收到警告,因为从技术上讲这不是导出到 excel,而是您发送带有错误标题的 html 以欺骗浏览器以使用 excel 打开此内容。

更好地使用原生 Excel 库并在服务器上生成真实的 Excel 文件,例如EPPlus,它是开源的,不需要服务器上的 excel。

这是从 DataTable 生成 excel 文件的 ashx 处理程序的示例

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

于 2013-07-31T12:23:33.373 回答