http://blog.csdn.net/jadeflute/article/details/5853000

http://www.cnblogs.com/px7034/archive/2010/09/10/1823321.html

将DataTable中的大量数据导出到Excel表格中。

但每张Excel表单只能有65536行,所以当DataTable数据多于65536行时,Excel要考虑分页功能。

代码在Office 2003 环境下通过。末验证其它Office版本。

        using Excel = Microsoft.Office.Interop.Excel;public Excel.Application m_xlApp = null;/// <summary>/// 将DataTable数据导出到Excel表/// </summary>/// <param name="tmpDataTable">要导出的DataTable</param>/// <param name="strFileName">Excel的保存路径及名称</param>public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName){if (tmpDataTable == null){return;}long rowNum = tmpDataTable.Rows.Count;//行数int columnNum = tmpDataTable.Columns.Count;//列数Excel.Application m_xlApp = new Excel.Application();m_xlApp.DisplayAlerts = false;//不显示更改提示m_xlApp.Visible = false;Excel.Workbooks workbooks = m_xlApp.Workbooks;Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1try{if (rowNum > 65536)//单张Excel表格最大行数{long pageRows = 65535;//定义每页显示的行数,行数必须小于65536int scount = (int)(rowNum / pageRows);//导出数据生成的表单数if (scount * pageRows < rowNum)//当总行数不被pageRows整除时,经过四舍五入可能页数不准{scount = scount + 1;}for (int sc = 1; sc <= scount; sc++){if (sc > 1){object missing = System.Reflection.Missing.Value;worksheet = (Excel.Worksheet)workbook.Worksheets.Add(missing, missing, missing, missing);//添加一个sheet}else{worksheet = (Excel.Worksheet)workbook.Worksheets[sc];//取得sheet1}string[,] datas = new string[pageRows + 1, columnNum];for (int i = 0; i < columnNum; i++) //写入字段{datas[0, i] = tmpDataTable.Columns[i].Caption;//表头信息}Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]);range.Interior.ColorIndex = 15;//15代表灰色range.Font.Bold = true;range.Font.Size = 9;int init = int.Parse(((sc - 1) * pageRows).ToString());int r = 0;int index = 0;int result;if (pageRows * sc >= rowNum){result = (int)rowNum;}else{result = int.Parse((pageRows * sc).ToString());}for (r = init; r < result; r++){index = index + 1;for (int i = 0; i < columnNum; i++){object obj = tmpDataTable.Rows[r][tmpDataTable.Columns[i].ToString()];datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式}System.Windows.Forms.Application.DoEvents();//添加进度条}Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, columnNum]);fchR.Value2 = datas;worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;//Sheet表最大化range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, columnNum]);//range.Interior.ColorIndex = 15;//15代表灰色range.Font.Size = 9;range.RowHeight = 14.25;range.Borders.LineStyle = 1;range.HorizontalAlignment = 1;}}else{string[,] datas = new string[rowNum + 1, columnNum];for (int i = 0; i < columnNum; i++) //写入字段{datas[0, i] = tmpDataTable.Columns[i].Caption;}Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]);range.Interior.ColorIndex = 15;//15代表灰色range.Font.Bold = true;range.Font.Size = 9;int r = 0;for (r = 0; r < rowNum; r++){for (int i = 0; i < columnNum; i++){object obj = tmpDataTable.Rows[r][tmpDataTable.Columns[i].ToString()];datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式}System.Windows.Forms.Application.DoEvents();//添加进度条}Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);fchR.Value2 = datas;worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]);//range.Interior.ColorIndex = 15;//15代表灰色range.Font.Size = 9;range.RowHeight = 14.25;range.Borders.LineStyle = 1;range.HorizontalAlignment = 1;}workbook.Saved = true;workbook.SaveCopyAs(strFileName);}catch (Exception ex){MessageBox.Show("导出异常:" + ex.Message, "导出异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);}finally{EndReport();}}/// <summary>/// 退出报表时关闭Excel和清理垃圾Excel进程/// </summary>private void EndReport(){object missing = System.Reflection.Missing.Value;try{m_xlApp.Workbooks.Close();m_xlApp.Workbooks.Application.Quit();m_xlApp.Application.Quit();m_xlApp.Quit();}catch { }finally{try{System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks);System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application);System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp);m_xlApp = null;}catch { }try{//清理垃圾进程this.killProcessThread();}catch { }GC.Collect();}}/// <summary>/// 杀掉不死进程/// </summary>private void killProcessThread(){ArrayList myProcess = new ArrayList();for (int i = 0; i < myProcess.Count; i++){try{System.Diagnostics.Process.GetProcessById(int.Parse((string)myProcess[i])).Kill();}catch { }}}

手动创建DataTable

public void createTable(){DataSet ds = new DataSet();using (DataTable dt = new DataTable("students")){//创建列DataColumn dtc = new DataColumn("姓名",typeof(string));dt.Columns.Add(dtc);dtc = new DataColumn("性别",typeof(string));dt.Columns.Add(dtc);dtc = new DataColumn("电话",typeof(Int32));dt.Columns.Add(dtc);//添加数据到DataTableDataRow dr = dt.NewRow();dr["姓名"] = "张三";dr["性别"] = "男";dr["电话"] = 54531;dt.Rows.Add(dr);dr = dt.NewRow();dr["姓名"] = "李四";dr["性别"] = "男";dr["电话"] = 5731;dt.Rows.Add(dr);dr = dt.NewRow();dr["姓名"] = "王五";dr["电话"] = 5868451;dr["性别"] = "女";dt.Rows.Add(dr);ds.Tables.Add(dt);}}

相关资料:

1. http://www.cnblogs.com/Ihaveadream/archive/2009/01/04/1368525.html

2. http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx

3. http://msdn.microsoft.com/zh-cn/library/microsoft.office.tools.excel(VS.80).aspx

C#将DataTable海量数据导出到Excel相关推荐

  1. C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)

    上次写了一个用文件流方式将Datatable导出Excel的方法,这个方法有局限性,比如没法对Excel进行一些增加列颜色等简单的操作,现在,给大家介绍另外一种方法,用微软的Excel类.既然要用到类 ...

  2. C# 海量数据导出到 Excel

    本篇介绍 C# 中 使用 Microsoft.Office.Interop.Excel 将数据导出到Excel文件的方法. 一般少量的数据可以使用循环设置Excel单元格值的方式导出数据: Works ...

  3. WPF 数据库数据导出为Datatable,Datatable导出为Excel

    安装Excel包 2.将数据库内容导为DataTable类型 System.Data.DataTable data_table = new System.Data.DataTable("My ...

  4. WPF将DataGrid导出到Excel表格

    将DataGrid转换成DataTabel,我这里因为项目的特殊性,这样转换,也有其他方法直接转换. public void Export(DataGrid dgData, DataTable dat ...

  5. 从DataTable高效率导出数据到Excel

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

  6. aspx页面中,DataTable中的数据导出到Excel文件中

    方法一:直接将DataTable中的数据通过GridView导出到Excel中,并显示下载界面 public void ExportToExcel(DataTable tab,string filen ...

  7. C#使用EPPlus.dll动态库在一般处理程序中实现将datatable导出到excel

    一..如何安装EPPLus 1.在Visual Studio的解决方案的引用上右键选择管理NeGet程序包 2.在管理NuGet程序包中搜索EPPlus,点击进行安装,安装后便直接添加到引用了 二.在 ...

  8. Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域

    上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...

  9. php datatable导出excel,C#_C#实现将DataTable内容输出到Excel表格的方法,本文实例讲述了C#实现将DataTabl - phpStudy...

    C#实现将DataTable内容输出到Excel表格的方法 本文实例讲述了C#实现将DataTable内容输出到Excel表格的方法.分享给大家供大家参考.具体如下: 1.关于本文 本文描述了一个函数 ...

最新文章

  1. 新手建议学php吗,关于PHP新手学习的一些指导和建议,新手来我的
  2. android 刷系统,安卓10的刷机教程,教你刷好Killer的精简包
  3. python将图片转动漫_如何把照片变成手绘动漫化?
  4. C++ Primer 5th笔记(chap 13 拷贝控制)合成的移动操作
  5. 三运放差分放大电路分析_三运放差分放大电路
  6. loadrunner中并发数与迭代的区别
  7. 西媒盘点:历史不该遗忘的七位女数学家
  8. 互联网把农业推向“科技仙境”
  9. 【算法】给定一个链表,判断链表中是否有环
  10. lombok工具中@Data注解问题
  11. Pandas DataFrame loc []访问一组行和列
  12. 孙鑫VC学习笔记:第十五讲 (二) 线程创建方法
  13. PPT幻灯中的文本格式及颜色修改方法注意事项
  14. 20171208校内训练
  15. CC攻击(Challenge Collapsar)原理及防范方法
  16. CentOS7.6的详细安装步骤
  17. 如何开心愉快兴趣满满的学习机器人和人工智能知识并提升思维力
  18. CAN笔记(17) 预定义报文ID
  19. 阿里云OSS配置及使用
  20. 机器学习——经典降维算法与框架综述

热门文章

  1. python模块大全doc_Python doc8包_程序模块 - PyPI - Python中文网
  2. Property 'filter' does not exist on type 'Observable' 报错解决方法
  3. Qt之QtCreator Qt5示例丢失解决方案
  4. 书信要写标题吗_BEC作文写作格式:标题要写吗?首行是否要缩进?
  5. C# 根据年月日计算星期几
  6. 性能测试之:loadrunner 报lr_load_dll 失败 CCI trace: vuser_init.c(6): ci_load_dll查证及解决过程...
  7. 维基解密:科技公司获得安全漏洞信息须答应几个条件
  8. Learnopengl
  9. Android自动化测试01-环境安装连接问题及解决
  10. python method与function方法_学编程这么久,还傻傻分不清什么是方法(method),什么是函数(function)?...