服务器控件导出成excel报表的一点小经验

mac2022-06-30  67

这里总结了一下比较常用的服务器控件导出成excel报表的经验与大家分享: 以前做excel报表导出的时候是自己一个一个地画表格,然后将数据组装,再用微软的excel组件来输出excel文件。 字段少还没关系,字段多了,一个一个地去拼,数据要一一对应,我的那个天啊! 俗话说“不会偷懒的程序员,不是一个好的程序员”,程序员就是为了那些懒人来服务滴(纯属个人总结,如有雷同,均出自此处)!所以要想尽各种办法来偷懒,那有没有好的办法,我在页面上看到什么,就一次性全部导出成excel文件呢?包括样式?毫无一问,回答当然是肯定的,要不要不会写这个总结了。。 OK,闲话少说,直接帖代码算了: 比较常用滴: grideview报表导出:

protected void Button1_Click(object sender, EventArgs e)        {            DataSet ds = new DataSet();            ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "XMLFile1.xml");            GridView1.DataSource = ds;            GridView1.DataBind();

            Response.Clear();            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");            Response.Charset = "gb2312";            Response.ContentType = "application/vnd.xls";            System.IO.StringWriter stringWrite = new System.IO.StringWriter();            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);            EnableViewState = false;            GridView1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());            Response.End();        }

如果你这样做了,你会得到一个很郁闷的错误提示:

Control 'CTTest1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

解决这个的办法有一个:public override void VerifyRenderingInServerForm(Control control)        {        } 加上上面这个重写的代码后,就能保存为excel文件了,是不是很爽啊?那么不这样写可不可以呢?回答当然也是肯定的:办法就是:不要使用gridview这个东东来绑定数据,用大伙比较喜欢的:Repeater控件来绑定程序!代码还是一样滴:Code:protected void Button1_Click(object sender, EventArgs e)        {

DataSet ds = new DataSet();            ds.ReadXml(AppDomain.CurrentDomain.BaseDirectory + "XMLFile1.xml");            GridView1.DataSource = ds;            GridView1.DataBind();

            Response.Clear();            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");            Response.Charset = "gb2312";            Response.ContentType = "application/vnd.xls";            System.IO.StringWriter stringWrite = new System.IO.StringWriter();            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);            EnableViewState = false;            GridView1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());            Response.End();}HTML:

<asp:Repeater ID="Repeater1" runat="server"><HeaderTemplate><table><tr><td>姓名</td><td>年龄</td></tr></HeaderTemplate><ItemTemplate><tr><td><%#Eval("name")%></td><td><%#Eval("age")%></td></tr></ItemTemplate><FooterTemplate></table></FooterTemplate></asp:Repeater><asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />

这样导出成excel报表就没问题了。其实有时候你会发现,如果你导出来的表格出现了乱码,这就很郁闷了,年龄列的表头名字为:“骞撮緞”,这是个什么编码?我又不是神仙,我怎么知道,于是又想了个办法,代码如下:        static void Main(string[] args)        {            string sttest = "骞撮緞";            EncodingInfo[] infoList=Encoding.GetEncodings();            foreach (EncodingInfo encode in infoList)            {                byte[] buffer1 = encode.GetEncoding().GetBytes(sttest);                string strBuffer = Encoding.UTF8.GetString(buffer1);                Console.WriteLine("Encoding={0},编码为:{1}", encode.Name.ToString(), strBuffer);            }}乖乖啊,乱码一大堆,不过如黑暗中见一丝曙光,有几个是“年龄”,于是挑了一个比较熟悉的编码:“GB18030”,于是将代码改成如下:

 protected void Button1_Click(object sender, EventArgs e)        {            Response.AddHeader("content-disposition", "attachment;filename=TaoBaoItems.xls");//网站编码            Response.Charset = "utf-8";//输出编码            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB18030");            Response.ContentType = "application/vnd.xls";            System.IO.StringWriter stringWrite = new System.IO.StringWriter();            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);                        Repeater1.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());            Response.End();        }

OK,一切搞定了,这个世界终于安静下来了!从此以后,大伙导出excel就是成事不求人了!

转载于:https://www.cnblogs.com/bbqqqbq/archive/2009/08/24/1552962.html

最新回复(0)