从asp.net c打开.xls文件时出错

时间:2015-11-21 07:28:24

标签: c# asp.net

当我想导出excel数据网格中的数据时,我有这段代码。 数据来自SQL。我正在使用ASP.NET C#。

 protected void ExportToExcel()
    {
        GridView gv = new GridView();
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("content-disposition", "attachment;filename=Serials.xls");
        Response.Charset = "";
        this.EnableViewState = false;

        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

        dt = new DataTable();
        dt = RetrieveResultsTable();
        //gv.AlternatingRowStyle.BackColor = Color. #CCFFFF
        gv.AlternatingRowStyle.BackColor = Color.FromArgb(204, 255, 255);
        gv.DataSource = dt;
        gv.DataBind();
        gv.RenderControl(htw);

        Response.Write(sw.ToString());
        Response.Flush();
        Response.Close();
        Response.End();
    }

当我导出它时,会产生警告/错误:

Different format than the specified extension

虽然我通过

修改注册表来搜索解决方案

registry modification

我不想修改注册表,因为这会非常麻烦,配置每个浏览器用户。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

gv.RenderControl(htw)

您只是将HTML文本文件发送到客户端的浏览器伪装成XLS文件,当然Excel会抱怨。

正如Lasse所指出的,文件不会通过指定扩展名来神奇地改变其格式。查看可用的库,例如NPOI,用于从任何表格数据中创建Excel格式文件的正确方法。

此外,您应该从ASHX通用处理程序将文件发送到浏览器,该处理程序绕过大多数ASP.NET页面生命周期内容,因此您不必处理响应中的任何排队输出。 / p>