服务器控件导出成excel报表的一点小经验
2009-08-24 15:34
267 查看
这里总结了一下比较常用的服务器控件导出成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();
}
如果你这样做了,你会得到一个很郁闷的错误提示:
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" onclick="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就是成事不求人了!
以前做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" onclick="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就是成事不求人了!
相关文章推荐
- PHP 导出Excel一点小经验 解决乱码问题
- PHP 导出Excel一点小经验 解决乱码问题.
- PHP 导出Excel一点小经验:解决乱码问题
- C# 将DataGridView控件内容导出到Excel报表
- PHP 导出Excel一点小经验 解决乱码问题.
- 一键导出Word和Excel文件的简单服务器控件
- ThinkPHP3.2.3接入PHPExcel1.8.0控件导出Excel报表文件处理方法
- html表格导出Excel的一点经验心得
- 一键导出Word和Excel文件的简单服务器控件
- 关于用excel导出gridview控件中的数据时,会提示什么服务器控件 ,要在server等等的错误
- ActiveReports 报表控件 : 导出 PDF、Word 和 Excel文件到客户端
- 二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
- 【推荐】.NET(webform,MVC)使用NPOI组件将数据导出、导入Excel。 Aspose.Cell 控件报表
- 服务器使用Excel导出控件出错处理
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)导出表格控件
- window2008 R2 64 位服务器中出现导出 Excel报表问题
- [转帖]一键导出Word和Excel文件的简单服务器控件
- html表格导出Excel的一点经验心得(转载)
- 一键导出Word和Excel文件的简单服务器控件
- C# 将DataGridView控件内容导出到Excel报表