repeater导出excel出错

zestsnake 2018-05-25 08:53:05
代码如下

Response.Clear();
Response.Buffer = true;
Response.Charset = "utf-8";
DateTime dt = DateTime.Now;//给导出后的Excel表命名,结合表的用途以及系统时间来命名
string filename = dt.Year.ToString() + dt.Month.ToString() + dt.Day.ToString() + dt.Hour.ToString() + dt.Minute.ToString() + dt.Second.ToString();

Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + ".xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
//Panel1.RenderControl(oHtmlTextWriter)

this.RpBook.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.Flush();
Response.End();





提示javascript 运行错误 ,抛出了一个无法接收的异常

这段代码一直好用的,只是这次用了scriptmananger updatepanel ,是否有影响?
...全文
1184 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason_Mao1 2018-06-09
  • 打赏
  • 举报
回复
这种方式应该是可以的,但是这种方式导出来的excel 打开是有兼容性的提示,我个人建议你使用NPOI 这个东西来做导出,比较好一点。希望能帮助到你 。
zestsnake 2018-06-09
  • 打赏
  • 举报
回复
顶一下 顶一下
zestsnake 2018-05-30
  • 打赏
  • 举报
回复


  public static void ToExcel1(DataTable Dt, string FileName)
        {
            System.Web.UI.WebControls.GridView dgExport = null;
            //当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            //IO用于导出并返回excel文件 
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;

            if (Dt != 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 
                dgExport = new System.Web.UI.WebControls.GridView();
                dgExport.DataSource = Dt.DefaultView;
                dgExport.AllowPaging = false;
                dgExport.DataBind();


                foreach (GridViewRow dg in dgExport.Rows)
                {
                    dg.Cells[2].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");
                    int bb = 6;
                    for (bb = 6; bb <= 12; bb++)
                    {

                        if (Convert.ToDecimal(dg.Cells[bb].Text.ToString()) < 0)
                        {
                            dg.Cells[bb].Attributes.Add("style", "color:red;vnd.ms-excel.numberformat: #,##0.00;");
                        }
                        else
                        {
                            dg.Cells[bb].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        }


                        /* dg.Cells[6].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        dg.Cells[7].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        dg.Cells[8].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        dg.Cells[9].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        dg.Cells[10].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");
                        dg.Cells[11].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00;");*/
                    }

                    //dg.Cells[5].Attributes.Add("style", "vnd.ms-excel.numberformat: #,##0.00%;");
                    //color:red;font-size:12pt;   用来设置颜色

                    //<td style=”vnd.ms-excel.numberformat:@”>
                    //    dg.Cells[6].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");
                    //  dg.Cells[8].Attributes.Add("style", "vnd.ms-excel.numberformat: @;");
                }


                //下载到客户端 
                dgExport.RenderControl(htmlWriter);
                curContext.Response.Write(strWriter.ToString());
                curContext.Response.End();
            }
        }

to shoppo0505 ,用这个试下
zestsnake 2018-05-30
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
写不写 Triggers 意义不大。 asp.net 端代码可以直接写
UpdatePanel1.Update();
UpdatePanel5.Update();
这类代码来指定哪一个 Panel 需要局部刷新,所以其实在设计时是不需要在 Triggers 里边来指定哪些控件的刷新造成相应的 UpdatePanel 也跟着刷新的。你完全可以用你的 asp.net 代码来动态地、灵活地指定。 并且这个技术,跟下载没有关系。
谢谢指点
  • 打赏
  • 举报
回复
写不写 Triggers 意义不大。 asp.net 端代码可以直接写
UpdatePanel1.Update();
UpdatePanel5.Update();
这类代码来指定哪一个 Panel 需要局部刷新,所以其实在设计时是不需要在 Triggers 里边来指定哪些控件的刷新造成相应的 UpdatePanel 也跟着刷新的。你完全可以用你的 asp.net 代码来动态地、灵活地指定。 并且这个技术,跟下载没有关系。
  • 打赏
  • 举报
回复
updatepanel 不支持整页重新刷新为另一套 html,updatepanel 只能局部刷新。 所以,你能做的,是在 updatepanel 嵌入的你的那个 button 的服务器端代码中,使用 RegisterStartupScript 等方法,注册一个脚本 window.open(....) 语句,在前端打开一个单独的“下载”页面。(并且可以在 url 参数中传递必要的参数值,例如把参数内存对象放入 Cache 并且把 Key 值作为页面 url 参数。 一般的浏览器,打开纯粹下载页面之后,会自动关闭窗口/选项卡页。因此下载是前端使用 window.open 函数来下载,而不是使用当前页面刷新 html 来下载!!
zestsnake 2018-05-28
  • 打赏
  • 举报
回复
都是按钮,一个是查出数据,另一个是导出
zestsnake 2018-05-28
  • 打赏
  • 举报
回复
我明天把导出的代码贴上来
shoppo0505 2018-05-27
  • 打赏
  • 举报
回复
引用 3 楼 zestsnake 的回复:
[quote=引用 2 楼 shoppo0505 的回复:] 对的,就是因为update panel的缘故,问题出在Response.End()这一句 我也遇到了相同的问题,尝试了网上基本所有的建议,没有找到解决方法。
我试下,加上这个好像可以了

 <Triggers>
         
         <asp:PostBackTrigger ControlID="Button1" /> 
         <asp:PostBackTrigger ControlID="but_zhcx" /> 
         <asp:PostBackTrigger ControlID="Button2" /> 
         </Triggers>

[/quote] 我试过加trigger,但是没有成功啊。 你这里Button1, but_zhcx,Button2都是按钮控件吧?是不是都有文件导出的代码?这3个按钮之间,本身没有什么联系吧?
zestsnake 2018-05-26
  • 打赏
  • 举报
回复
引用 2 楼 shoppo0505 的回复:
对的,就是因为update panel的缘故,问题出在Response.End()这一句 我也遇到了相同的问题,尝试了网上基本所有的建议,没有找到解决方法。
我试下,加上这个好像可以了

 <Triggers>
         
         <asp:PostBackTrigger ControlID="Button1" /> 
         <asp:PostBackTrigger ControlID="but_zhcx" /> 
         <asp:PostBackTrigger ControlID="Button2" /> 
         </Triggers>

zestsnake 2018-05-25
  • 打赏
  • 举报
回复

function Sys$WebForms$PageRequestManager$_endPostBack(error, executor, data) { 
        if (this._request === executor.get_webRequest()) { 
            this._processingRequest = false; 
            this._additionalInput = null; 
            this._request = null; 
        } 
        var handler = this._get_eventHandlerList().getHandler("endRequest"); 
        var errorHandled = false; 
        if (handler) { 
            var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, data ? data.dataItems : {}, executor); 
            handler(this, eventArgs); 
            errorHandled = eventArgs.get_errorHandled(); 
        } 
        if (error && !errorHandled) { 
            throw error; 
        } 
    }

这里出错
shoppo0505 2018-05-25
  • 打赏
  • 举报
回复
对的,就是因为update panel的缘故,问题出在Response.End()这一句 我也遇到了相同的问题,尝试了网上基本所有的建议,没有找到解决方法。

62,046

社区成员

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

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

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

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