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();
}
...全文
1250 17 打赏 收藏 转发到动态 举报
写回复
用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文件的格式导出 不要混用啊
PowerBI系列之基础和可视化技能专题基础概念PowerBI是什么PowerBI优秀作品展示PowerBI组件简介 PowerBI Desktop的下载安装PowerBI Desktop界面介绍和5分钟入门 PowerBI账号区别PowerBI对象和结构PowerBI和Tableau等其他主流BI产品的介绍 PowerBI官方文档基本操作文件和报表设置选项介绍页面属性设置-大小、背景、壁纸、对齐、筛选器窗格格式页面视图-适应页面、宽度、实际大小视觉对象格式属性面板快速调整页面布局和样式 (文本笔记)视觉对象分组、显示或隐藏 使用数据对象表和数据点表   向报表添加文本框和形状可视化技能使用编辑交互功能来控制图表联动多层联动中控制使用Control Click切片器的使用同步切片器折叠切片器给切片器设定默认值给切片器设定动态默认值(DAX函数-默认当前月或天)使切片器默认代表无任何选择切片器仅显示有对应数据的选项使切片器反向筛选和计算切片器之间取数据并集关系中多端的切片器筛选一端的切片器参数的创建和参数切片器的使用筛选器书签和选择窗格下拉式多级菜单页面导航菜单报表主页设计和重置切片器普通和自定义以及视觉对象标头工具提示按列排序和自定义排序分组装箱普通钻取和层次钻取及跨页钻取保留所有筛选器和设置钻取按钮跨报表钻取Matrix 矩阵详解矩阵中为每个列快速设置相同列宽矩阵中动态显示列的两种方法使用Web超链接和图片超链接文本框设置超链接或邮件地址手机端页面布局创建参数和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限利用参数实现数据手工加密和权限控制利用页面导航控制页面级权限报表主题控制和主题模板生成器PBIX和PBIT文件结构解析:提取图片和主题,提取已下架的自定义图表,报表元数据等 PBIDS预定义数据连接文件DAX函数使可视化强大 DAX函数实现特殊符号的使用 DAX函数实现切片器默认当前月或天 DAX函数使切片器默认代表无任何选择 DAX函数使切片器仅显示有数据的选项 DAX函数使切片器反向筛选和计算 DAX函数使切片器之间取并集 DAX函数使关系中多端的切片器筛选一端的切片器DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标  

62,041

社区成员

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

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

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

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