ASP.NET 中 DataGrid 导出到 Excel 的封装实现

文章类型:Asp.Net  作者:木野狐
最近的项目中要大量用到 DataGrid 中的数据导出到 Excel 的方法,且数据量比较大。针对这个我做了一个导出 Excel 的帮助类。
之前在网上我搜索到很多导出 Excel 的代码,但是都不尽如人意。一般有下列几种方法:

1. 用 Excel.Application 对象逐单元格的填充数据。
这个办法由于是操作 COM 组件来进行,而 .NET 调用 COM 是要经过一层 wrapper 的,必然导致效率不高。还有一个原因是, Excel 不是针对多线程而设计的, 在大的并发需求下,可能会出现问题。因此一般这个方法只推荐适用于 Intranet.

2.  用 DataGrid 的 RenderControl 方法直接输出到一个 HtmlTextWriter 对象。 这个办法比较简单,因为是输出纯 html, 不涉及服务端 Excel 对象的初始化带来的开销。所以性能应该是比较好的。但是我看了现有的一些例子都是只能输出一页的, 也就是说不适用于分页的 DataGrid.

3. 用 OWC, 同样,由于是 COM 组件,存在性能问题。

针对这个情况我决定采用 2 作为最终输出的方法,在内存中构造不分页的 DataGrid, 然后 RenderControl 的方法。(要传入数据源作为参数)。
因为我加了自定义列标题和字段列表的功能,所以目前的数据源只能是类似 DataTable 这样的,至于一些其他可以绑定到 DataGrid 的类型比如 IListSource, IEnumerable, 由于内部不带有字段名称,标题信息等内容,分析起来非常复杂。简单起见,我忽略了这些,而仅仅接收 DataTable 作为数据源。

代码在这里:
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)//=============================================================================== 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 从 DataGrid    或数据源中导出数据到 Excel 并提示下载的帮助类。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// Author:    Roger Chen (木野狐) 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// Date:    2005-1-27 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// Version: 1.22 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// History: 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//            v1.00    使用静态方法的形式实现该类,提供多种重载方式。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//            v1.01    添加了对 DevExpress.Web.ASPxGrid.ASPxGrid 的直接导出支持。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//            v1.20    改写为实体类。 减少了重复代码。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//            v1.21    2005-2-1     
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//                    修改了一个构造函数的重载形式中异常检测的代码。延迟到 Export() 方法。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//            v1.22    2005-2-3     
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//                    1. 修正了 Export() 方法中缺少 _titles != null 判断的 bug. 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//                    2. 修正了长的数字被 Excel 自动转换为科学计数法的毛病。 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//                        (修改的办法来自 http://dotnet.aspx.cc
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
//=============================================================================== 
 


代码就是页面里这些了。不过忘记了写调用的例子,现在补上:
以下例子实际调用时需要在外面用 try 块捕获并处理异常。可能抛出的异常有 ParameterException, ParameterNullException, Exception 等。
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)// 1. 导出一个不分页的 DataGrid 到 Excel.
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
ExcelHelper helper = new ExcelHelper(); 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 设置文件名(可省。省略则自动生成一个随机的文件名)
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
helper.FileName = "xxx.xls"
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)helper.Export(dg); 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 2. 导出分页的 DataGrid,需要同时指定他的数据源(DataTable)
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
DataTable dt = ; 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)ExcelHelper helper 
= new ExcelHelper(dt); 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 最大导出条数(可省)
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
helper.MaxRecords = 2000
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)helper.Export(); 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
// 3. 如果要指定列标题,这样调用:
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)
DataTable dt = ; 
ASP.NET 中 DataGrid 导出到 Excel 的封装实现 (转)ExcelHelper helper 
= new ExcelHelper( 
helper.Export();
原文:http://www.soft123.com/news/html/2005-03/2005327110552.htm

相关文章:

  • 2022-12-23
  • 2021-12-12
  • 2021-11-06
  • 2022-12-23
  • 2021-12-01
  • 2021-06-27
  • 2021-09-30
猜你喜欢
  • 2021-11-24
  • 2021-10-04
  • 2022-12-23
  • 2022-02-11
相关资源
相似解决方案