从DataTable高效率导出数据到Excel

首先从数据库读取数据到DataTable,这我就不提了,大家都明白。下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下:

 1 using Microsoft.Office.Interop.Excel;
 2 using System.Runtime.InteropServices;
 3
 4 [DllImport("User32.dll", CharSet = CharSet.Auto)]
 5 public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int pid);
 6 //函数原型;DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld);
 7 //参数:hWnd:窗口句柄
 8 //参数:lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝
 9 //返回值:返回值为创建窗口的线程标识。
10
11 //dt:从数据库读取的数据;file_name:保存路径;sheet_name:表单名称
12 private void DataTableToExcel(DataTable dt, string file_name, string sheet_name)
13 {
14        Microsoft.Office.Interop.Excel.Application Myxls = new  Microsoft.Office.Interop.Excel.Application();
15        Microsoft.Office.Interop.Excel.Workbook Mywkb = Myxls.Workbooks.Add();
16        Microsoft.Office.Interop.Excel.Worksheet MySht = Mywkb.ActiveSheet;
17        MySht.Name = sheet_name;
18        Myxls.Visible = false;
19        Myxls.DisplayAlerts = false;
20        try
21        {
22               //写入表头
23               object[] arrHeader = new object[dt.Columns.Count];
24               for(int i = 0; i < dt.Columns.Count; i++)
25               {
26                      arrHeader[i] = dt.Columns[i].ColumnName;
27               }
28               MySht.Range[Mysht.Cells[1,1], MySht.Cells[1,dt.Columns.Count]].Value2 = arrHeader;
29               //写入表体数据
30               object[,] arrBody = new object[dt.Rows.Count, dt.Columns.Count];
31               for(int i = 0; i < dt.Rows.Count; i++)
32               {
33                       for(int j = 0; j < dt.Columns.Count; j++)
34                       {
35                               arrBody[i,j] = dt.Rows[i][j].ToString();
36                       }
37               }
38               MySht.Range[MySht.Cells[2,1], MySht.Cells[dt.Rows.Count + 1, dt.Columns.Count]].Value2 = arrBody;
39               if(Mywkb != null)
40               {
41                       Mywkb.SaveAs(file_name);
42                       Mywkb.Close(Type.Missing, Type.Missing, Type.Missing);
43                       Mywkb = null;
44               }
45        }
46        catch(Exception ex)
47        {
48                MessageBox.Show(ex.Message, "系统提示");
49        }
50        finally
51        {
52                 //彻底关闭Excel进程
53                 if(Myxls != null)
54                 {
55                        Myxls.Quit();
56                        try
57                        {
58                               if(Myxls != null)
59                               {
60                                     int pid;
61                                     GetWindowThreadProcessId(new IntPtr(Myxls.Hwnd), out pid);
62                                     System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(pid);
63                                      p.Kill();
64                               }
65                        }
66                        catch(Exception ex)
67                        {
68                               MessageBox.Show("结束当前EXCEL进程失败:" + ex.Message);
69                        }
70                        Myxls = null;
71                 }
72                 GC.Collect();
73        }
74 }

说明:

1)上述方法中,将DataTable单元格内容写入数组后一次性赋值给Excel的Range,效率非常高,比之循环DataTable单元格逐个赋值给Excel的Cell的方法,速度快多了;

2)上述方法中用到的彻底关闭Excel进程的方式,也值得注意。

时间: 2024-11-08 10:20:34

从DataTable高效率导出数据到Excel的相关文章

C#导出数据到Excel通用的方法类

导出数据到Excel通用的方法类,请应对需求自行修改. 资源下载列表 using System.Data; using System.IO; namespace IM.Common.Tools { public class Export { public string Encoding = "UTF-8"; System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; public void Ec

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

导出数据到Excel方法总结

导出数据到Excel方法总结 一,问题的提出 近来在网上经常有人问怎样把数据导出到Excel中?针对这个问题网上也有很多资料.大都比较的琐碎.本人当前从事的项目中,刚好涉及到这些内容.就顺便做了一些归纳整理.共享给大家.避免大家再花费很多时间研究这个老生长谈的问题. 二,解决方法 1.       用NPOI导出数据到Excel. 简介:NPOI是一个开源的dotnet类库,官方网站:http://npoi.codeplex.com/. 优点:支持Excel 2003格式,读写速度快,基于.NE

C#导出数据至excel模板

开源分享最近一个客户要做一个将数据直接输出到指定格式的Excel模板中,略施小计,搞定 其中包含了对Excel的增行和删行,打印预览,表头,表体,表尾的控制 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Reflection; using System

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult 导出EXCEL方法总结:MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可:优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件: 2.设置输出头为:application/ms-excel,再输出拼接的HTM

Dynamics CRM导出数据到Excel

原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM将数据导出到Excel的功能. (一)导出数据到Excel的三种类型 下图中点击红框内的按钮EXPORT TO EXCEL,会弹出三个选项 第一个是一个静态工作表,将当前页面内的数据导出到一张表内.该数据是静态的,也就是说CRM里的数据发生改变,工作表的数据不会发生相应修改.如果勾选了”Make t

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方-------缺点,必须使用table tr td

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方 时间:2012-08-17 13:50来源:未知 作者:硅峰网络-红豆 点击:219次 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel的格式为文本格式. 我试用过第一种确实可以显示,但是有个'号在那里感觉确实不是很好,虽然听说不影响,但是需要用户点击那个单元格那个单引号才消失,并且在该 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel

PHP导出数据到Excel

PHP导出数据到Excel 在Web开发中经常需要将一些数据导入到Excel表格中,比如需要导出符合条件的用户数据,导出项包括姓名.性别.***号.联系方式等等.那么问题来了,在导出的数据中如果出现比较长的数值类型的项时,默认按科学计数法表示,比如***号这显然不是我们需要的,那么我们怎么做才能让数据按我们要求的格式显示呢? 查到一些相关资料,摘抄如下: 首先,我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所

CodeIgniterCodeigniter+PHPExcel导出数据到Excel文件

解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:--application\libraries\PHPExcel.php--application\libraries\PHPExcel(文件夹)修改application\libraries\PHPExcel\IOFactory.php文件--将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则.--将其构造函数改为public $this->loa