asp.net导出Excel问题“服务器无法在发送 HTTP 标头之后追加标头。”怎么解决

RaysonYuan 2014-09-18 02:25:23
如题怎么把这个问题解决

代码:
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="DT"></param>
private void ExportToExcel(DataTable DT)
{
StringWriter sw = new StringWriter();
StringBuilder sb = new StringBuilder();
foreach (DataColumn DC in DT.Columns)
{
if (!String.IsNullOrEmpty(DC.Caption))
{
sb.Append("\t" + DC.Caption);
}
}
if (sb.Length > 0)
{
sw.WriteLine(sb.ToString().Substring(1));
foreach (DataRow Dr in DT.Rows)
{
sb = new StringBuilder();
foreach (DataColumn DC in DT.Columns)
{
if (!String.IsNullOrEmpty(DC.Caption))
{
sb.Append("\t" + Dr[DC].ToString());
}
}
sw.WriteLine(sb.ToString().Substring(1));
}
}
sw.Close();
DT.Clear();
DT.Dispose();
Response.AddHeader("Content-Disposition", "attachment; filename=report.xls"); 到这报错
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.Write(sw);
Response.End();
}
...全文
1304 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxx870601 2014-09-22
  • 打赏
  • 举报
回复
     private void DataTable2Excel(System.Data.DataTable dtData, String FileName)
        {

            //当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            //IO用于导出并返回excel文件 
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;

            if (dtData != null)
            {
                //设置编码和附件格式 
                //System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)作用是方式中文文件名乱码 
                curContext.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");
                curContext.Response.ContentType = "application nd.ms-excel";
                curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
                curContext.Response.Charset = "GB2312";

                //导出Excel文件 
                strWriter = new System.IO.StringWriter();
                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

                //为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的GridView 
                gvExport.DataSource = dtData.DefaultView;
                gvExport.AllowPaging = false;
                gvExport.DataBind();

                //下载到客户端 
                gvExport.RenderControl(htmlWriter);
                curContext.Response.Write(strWriter.ToString());
                curContext.Response.End();
            }
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
zxx870601 2014-09-22
  • 打赏
  • 举报
回复
代码里加这个方法了没?
  public override void VerifyRenderingInServerForm(Control control)
        {
        }
RaysonYuan 2014-09-19
  • 打赏
  • 举报
回复
private void ExportToExcel(DataTable DT)
        { 
            StringWriter sw = new StringWriter();
            StringBuilder sb = new StringBuilder();
            foreach (DataColumn DC in DT.Columns)
            {
                if (!String.IsNullOrEmpty(DC.Caption))
                {
                    sb.Append("\t" + DC.Caption);
                }
            }
            if (sb.Length > 0)
            {
                sw.WriteLine(sb.ToString().Substring(1));

                foreach (DataRow Dr in DT.Rows)
                {
                    sb = new StringBuilder();
                    foreach (DataColumn DC in DT.Columns)
                    {
                        if (!String.IsNullOrEmpty(DC.Caption))
                        {
                            sb.Append("\t" + Dr[DC].ToString());
                        }
                    }
                    sw.WriteLine(sb.ToString().Substring(1));
                }
            }

            //sw.Close();
            //DT.Clear();
            //DT.Dispose(); 
            Response.AddHeader("Content-Disposition", "attachment; filename=report.xls");
            Response.ContentType = "application/ms-excel";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.Write(sw);
            Response.End();
        }
       
        protected void Button1_Click1(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                ExportToExcel(ToOutExcel(null));
                //ExcelHelper eh = new ExcelHelper();
                //eh.DataTableToOfficeExcel(ToOutExcel(null), 1,1);
            }
            else
            {
                string id = Request.QueryString["id"].ToString();

                ExportToExcel(ToOutExcel(id));
            }
        }
我什么都没做就导出
RaysonYuan 2014-09-19
  • 打赏
  • 举报
回复
引用 10 楼 wyumening 的回复:
在使用 Response.AddHeader("Content-Disposition", "attachment; filename=report.xls"); 这句之前有没有对Response的Header再做什么操作?
没有,上边有代码
wyumening 2014-09-19
  • 打赏
  • 举报
回复
引用 14 楼 u012293393 的回复:
private void ExportToExcel(DataTable DT)
        { 
            StringWriter sw = new StringWriter();
            StringBuilder sb = new StringBuilder();
            foreach (DataColumn DC in DT.Columns)
            {
                if (!String.IsNullOrEmpty(DC.Caption))
                {
                    sb.Append("\t" + DC.Caption);
                }
            }
            if (sb.Length > 0)
            {
                sw.WriteLine(sb.ToString().Substring(1));

                foreach (DataRow Dr in DT.Rows)
                {
                    sb = new StringBuilder();
                    foreach (DataColumn DC in DT.Columns)
                    {
                        if (!String.IsNullOrEmpty(DC.Caption))
                        {
                            sb.Append("\t" + Dr[DC].ToString());
                        }
                    }
                    sw.WriteLine(sb.ToString().Substring(1));
                }
            }

            //sw.Close();
            //DT.Clear();
            //DT.Dispose(); 
            Response.AddHeader("Content-Disposition", "attachment; filename=report.xls");
            Response.ContentType = "application/ms-excel";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.Write(sw);
            Response.End();
        }
       
        protected void Button1_Click1(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                ExportToExcel(ToOutExcel(null));
                //ExcelHelper eh = new ExcelHelper();
                //eh.DataTableToOfficeExcel(ToOutExcel(null), 1,1);
            }
            else
            {
                string id = Request.QueryString["id"].ToString();

                ExportToExcel(ToOutExcel(id));
            }
        }
我什么都没做就导出
那你在调用 ExportToExcel 方法之前写了什么代码?能贴出来吗?
  • 打赏
  • 举报
回复
你要说明你在调用 ExportToExcel 之前都干了什么事儿。
饕餮123 2014-09-18
  • 打赏
  • 举报
回复
在使用 Response.AddHeader("Content-Disposition", "attachment; filename=report.xls"); 这句之前 应该是有response.flush操作
wyumening 2014-09-18
  • 打赏
  • 举报
回复
在使用 Response.AddHeader("Content-Disposition", "attachment; filename=report.xls"); 这句之前有没有对Response的Header再做什么操作?
RaysonYuan 2014-09-18
  • 打赏
  • 举报
回复
引用 8 楼 qzyf1992 的回复:
直接把你出错的这句话注释掉
不管用,注释掉下边的也出错,都注释掉就没效果了
qzyf1992 2014-09-18
  • 打赏
  • 举报
回复
直接把你出错的这句话注释掉
RaysonYuan 2014-09-18
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
你要是想导出的列标题是中文 就在导出前,修改一下dt的columnName
哥还是不行还是那个错
於黾 2014-09-18
  • 打赏
  • 举报
回复
你要是想导出的列标题是中文 就在导出前,修改一下dt的columnName
於黾 2014-09-18
  • 打赏
  • 举报
回复

        System.Web.UI.WebControls.GridView dataGrid = new System.Web.UI.WebControls.GridView();
        dataGrid.DataSource = dt.DefaultView;
        dataGrid.AllowPaging = false;
        dataGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        dataGrid.HeaderStyle.Font.Bold = true;
        dataGrid.DataBind();

        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("人员出现场统计", System.Text.Encoding.UTF8) + ".xls");
        HttpContext.Current.Response.Charset = "UTF-8";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        dataGrid.EnableViewState = false;
        dataGrid.AutoGenerateColumns = true;
        System.IO.StringWriter tw = new System.IO.StringWriter();

        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        dataGrid.RenderControl(hw);

        HttpContext.Current.Response.Write(tw.ToString());
        HttpContext.Current.Response.End();
RaysonYuan 2014-09-18
  • 打赏
  • 举报
回复


我换了种方式还是不行,换了好几种方式了,我不需要好看,能导出就行,愁死我了前几天用这个还没问题,今天弄这个就出问题了

引用 3 楼 Z65443344 的回复:
你查:
导出excel
代码一堆一堆的
不过不管你用html还是txt,导出来都不是真正的excel,打开时会报错
而且也没法进行excel单元格的详细设置,比如合并单元格,修改字体颜色什么的
想导出的好看,还是用NPOI吧
於黾 2014-09-18
  • 打赏
  • 举报
回复
你查: 导出excel 代码一堆一堆的 不过不管你用html还是txt,导出来都不是真正的excel,打开时会报错 而且也没法进行excel单元格的详细设置,比如合并单元格,修改字体颜色什么的 想导出的好看,还是用NPOI吧
RaysonYuan 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
你这是什么用法... 不要自己胡乱发明啊 你到底是生成html页下载,还是以txt文件的格式导出 不要混用啊
哪怎么写,给个代码啊哥
於黾 2014-09-18
  • 打赏
  • 举报
回复
你这是什么用法... 不要自己胡乱发明啊 你到底是生成html页下载,还是以txt文件的格式导出 不要混用啊

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧