GridView导出到Excel或Word文件

简介:
在项目中我们经常会遇到要求将一些数据导出成Excel或者Word表格的情况,比如中国移动(我是中国移动用户)网上查话费的页面中就有一个导出到Excel的功能,光大网上银行查看历史明细也有这些功能....,原本以为这个问题不难的,不过看到网上经常有朋友问,于是我整理了一下,供大家参考。
        前台页面:
< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="ExportDemo.aspx.cs"  Inherits ="ExportDemo" % > 

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > 

< html  xmlns ="http://www.w3.org/1999/xhtml"  > 
< head  runat ="server" > 
         < title >GridView导出到Excel或Word文件——周公的博客:http://blog.csdn.net </title> 
</head> 
< body > 
         < form  id ="form1"  runat ="server" > 
         < div > 
                 < asp:GridView  ID ="gvPersonList"  runat ="server"  AutoGenerateColumns ="False" > 
                         < Columns > 
                                 < asp:BoundField  DataField ="Id"  HeaderText ="编号"  /> 
                                 < asp:BoundField  DataField ="Name"  HeaderText ="姓名"  /> 
                                 < asp:TemplateField  HeaderText ="性别" > 
                                         < ItemTemplate > 
                                                 < %#  Eval("Sex").ToString()= ="true"?"男":"女" % > 
                                         </ItemTemplate> 
                                 </asp:TemplateField> 
                                 < asp:BoundField  DataField ="Age"  HeaderText ="年龄"  /> 
                                 < asp:TemplateField  HeaderText ="婚否" > 
                                         < ItemTemplate > 
                                                 < %# Boolean.Parse(Eval("Married").ToString())==true?"是":"否" % > 
                                         </ItemTemplate> 
                                 </asp:TemplateField> 
                         </Columns> 
                 </asp:GridView> 
                 < asp:Button  ID ="btnToExcel"  runat ="server"  OnClick ="btnToExcel_Click"  Text ="导出到Excel"  /> 
                 < asp:Button  ID ="btnToWord"  runat ="server"  OnClick ="btnToWord_Click"  Text ="导出到Word"  /> 
         </div> 
         </form> 
</body> 
</html>

后台代码:
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

/// <summary> 
/// 程序说明:这是一个GridView导出成Excel或者Word文件的实例。为了演示,我采用了自动生成DataTable,然后绑定。 
/// 同时为了初学者查看代码方便,关键处我都做了注释。 
/// 对程序说明,在asp.net 1.1中由于对控件呈现不是很严格,所以无需override void VerifyRenderingInServerForm(Control control)这个方法 
/// 但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法中它自己调用才能成功, 
/// 在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,你明明写在服务器控件Form内,它照样会这样提醒你, 
/// 实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。如果不override VerifyRenderingInServerForm 
/// 就会报错。我们override void VerifyRenderingInServerForm(Control control)这个方法,里面不写任何代码即可 
/// 作者:周公 
/// 日期:2008-5-16 
/// 网址:http://blog.csdn.net/zhoufoxcn 
/// </summary> 
public partial  class ExportDemo : System.Web.UI.Page 

         private  string firstName =  "赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华"
         private  string lastName =  "猛勇刚强豹彪雁燕蓉菲"
void Page_Load() void Page_Load(object sender, EventArgs e) 
        { 
                 if (!Page.IsPostBack) 
                { 
                        BindGridView(); 
                } 
        } 

void BindGridView() void BindGridView() 
        { 
                DataTable myData = CreateDataTable(); 
                Session[ "MyData"] = myData; 
                gvPersonList.DataSource = myData; 
                gvPersonList.DataBind(); 
        } 
        //手动生成DataTable 
DataTable CreateDataTable() DataTable CreateDataTable() 
        { 
                DataTable data =  new DataTable(); 
                DataColumn dcId =  new DataColumn( "ID", typeof(Int32)); 
                //设置ID列自动递增 
                dcId.AutoIncrement =  true
                //设置ID列初始值为1 
                dcId.AutoIncrementSeed = 1; 
                //设置ID列递增步长为1 
                dcId.AutoIncrementStep = 1; 
                //将ID列添加到DataTable中 
                data.Columns.Add(dcId); 
                data.Columns.Add( new DataColumn( "Name", typeof( string))); 
                data.Columns.Add( new DataColumn( "Age", typeof(int))); 
                data.Columns.Add( new DataColumn( "Sex", typeof(bool))); 
                data.Columns.Add( new DataColumn( "Married", typeof(bool))); 
                DataRow dataRow =  null
                Random random =  new Random(); 
                //随机生成20条记录 
                 for (int i = 0; i < 20; i++) 
                { 
                        dataRow = data.NewRow(); 
                        //随机生成姓名 
                        dataRow[ "Name"] = firstName.Substring(random. Next(firstName.Length), 1) + lastName.Substring(random. Next(lastName.Length), 1); 
                        //随即生成介于20至100之间的年龄 
                        int age = random. Next(20, 100); 
                        dataRow[ "Age"] = age; 
                        //随即设置性别 
                        bool sex = (random. Next(100) % 2 == 0) ?  true :  false
                        dataRow[ "Sex"] = sex; 
                         if (((sex ==  true) && (age >= 22)) || ((sex ==  false) && (age >= 20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁 
                        { 
                                dataRow[ "Married"] = (random. Next(500) % 2 == 0) ?  true :  false
                        } 
                         else 
                        { 
                                dataRow[ "Married"] =  false
                        } 
                        data.Rows.Add(dataRow); 
                } 
                return data; 
        } 
        //override掉这个方法 
override void VerifyRenderingInServerForm() override void VerifyRenderingInServerForm(Control control) 
        { 
                //注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net 2.0下的控件,1.1下一些控件也可以导出成Excel或者Word) 
                //base.VerifyRenderingInServerForm(control); 
        } 


void btnToExcel_Click() void btnToExcel_Click(object sender, EventArgs e) 
        { 
                Response.Clear(); 
                Response.BufferOutput =  true
                //设定输出的字符集 
                Response.Charset =  "GB2312"
                //假定导出的文件名为FileName.xls 
                Response.AppendHeader( "Content-Disposition""attachment;filename=FileName.xls"); 
                Response.ContentEncoding = System.Text.Encoding.GetEncoding( "GB2312"); 
                //设置导出文件的格式 
                Response.ContentType =  "application/ms-excel"
                //关闭ViewState 
                EnableViewState =  false
                System.Globalization.CultureInfo cultureInfo =  new System.Globalization.CultureInfo( "ZH-CN"true); 
                System.IO.StringWriter stringWriter =  new System.IO.StringWriter(cultureInfo); 
                System.Web.UI.HtmlTextWriter textWriter =  new System.Web.UI.HtmlTextWriter(stringWriter); 
                gvPersonList.RenderControl(textWriter); 
                //把HTML写回浏览器 
                Response.Write(stringWriter.ToString()); 
                Response. End(); 
        } 
        //导出成Word文件 
void btnToWord_Click() void btnToWord_Click(object sender, EventArgs e) 
        { 
                Response.Clear(); 
                Response.BufferOutput =  true
                //设定输出的字符集 
                Response.Charset =  "GB2312"
                //假定导出的文件名为FileName.doc 
                Response.AppendHeader( "Content-Disposition""attachment;filename=FileName.doc"); 
                Response.ContentEncoding = System.Text.Encoding.GetEncoding( "GB2312"); 
                ////设置导出文件的格式 
                Response.ContentType =  "application/ms-word"
                //关闭ViewState 
                gvPersonList.EnableViewState =  false
                System.Globalization.CultureInfo cultureInfo =  new System.Globalization.CultureInfo( "ZH-CN"true); 
                System.IO.StringWriter stringWriter =  new System.IO.StringWriter(cultureInfo); 
                System.Web.UI.HtmlTextWriter textWriter =  new System.Web.UI.HtmlTextWriter(stringWriter); 
                gvPersonList.RenderControl(textWriter); 
                // //把HTML写回浏览器 
                Response.Write(stringWriter.ToString()); 
                Response. End(); 
        } 
}
运行效果:
 
需要说明的是:在asp.net2.0环境下,VerifyRenderingInServerForm(Control control)这个方法不override的话,则会出现“错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”这个错误。


















本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/166817  ,如需转载请自行联系原作者


相关文章
|
17天前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
54 5
|
1月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
131 8
|
3月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
367 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
人工智能 自然语言处理 JavaScript
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
Univer 是一款开源的 AI 办公工具,支持 Word、Excel 等文档处理的全栈解决方案。它具有强大的功能、高度的可扩展性和跨平台兼容性,适用于个人和企业用户,能够显著提高工作效率。
252 8
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
58 6
按条件将Excel文件拆分到不同的工作表
|
3月前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
83 6
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
73 6
|
4月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
61 1
|
3月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
431 10
|
18天前
|
分布式计算 Hadoop 大数据
从Excel到Hadoop:数据规模的进化之路
从Excel到Hadoop:数据规模的进化之路
45 10

热门文章

最新文章