本篇介绍 C# 中 使用 Microsoft.Office.Interop.Excel 将数据导出到Excel文件的方法。

一般少量的数据可以使用循环设置Excel单元格值的方式导出数据:

Worksheet.Cells[x, y] = value;

当数据条数很大时使用这种方式就会消耗大量时间。此时可以使用按区域设置数据源的方式进行数据导出:

 Range.Value2 = data;

完整的代码如下:

        using System;using Microsoft.Office.Interop.Excel;/// <summary>/// 分页导出Excel/// </summary>/// <param name="dataTable">导出数据</param>/// <param name="pageSize">分页数据条数</param>/// <param name="fileName">导出文件名</param>public static void ExportToExcel(System.Data.DataTable dataTable, int pageSize, string fileName){Application app = new Application();if (app == null) return;   //Excel 启动失败Workbook workbook = app.Workbooks.Add(Type.Missing);Worksheet worksheet = (Worksheet)workbook.Worksheets.get_Item(1);object missing = System.Reflection.Missing.Value;long totalRow = dataTable.Rows.Count;int totalPage = (int)((totalRow - 1) / pageSize) + 1;for (int pageIndex = 1; pageIndex <= totalPage; pageIndex++){if (pageIndex > 1){worksheet = (Worksheet)workbook.Worksheets.Add(missing, missing, missing, missing);  //添加新页}else{worksheet = (Worksheet)workbook.Worksheets[pageIndex];  //直接取第一页}//当前页的数据string[,] pageData = new string[pageSize + 1, dataTable.Columns.Count + 1];//设置表头(第一行)数据for (int i = 0; i < dataTable.Columns.Count; i++){pageData[0, i] = dataTable.Columns[i].Caption;}//当前页起始数据在源数据中的索引int pageStartRowIndex = (pageIndex - 1) * pageSize;//当前页行数索引,游标int dataTableRowIndex = 0;int curPageRowIndex = 0;//当前页最后一行数据在源数据中的索引int pageEndRowIndex;if (pageSize * pageIndex >= dataTable.Rows.Count){pageEndRowIndex = dataTable.Rows.Count;}else{pageEndRowIndex = int.Parse((pageSize * pageIndex).ToString());}// 当前页数据准备for (dataTableRowIndex = pageStartRowIndex; dataTableRowIndex < pageEndRowIndex; dataTableRowIndex++){curPageRowIndex = curPageRowIndex + 1;for (int i = 0; i < dataTable.Columns.Count; i++){if (dataTable.Columns[i].DataType == typeof(string) ||dataTable.Columns[i].DataType == typeof(Decimal) ||dataTable.Columns[i].DataType == typeof(DateTime)){object obj = dataTable.Rows[dataTableRowIndex][dataTable.Columns[i].ColumnName];pageData[curPageRowIndex, i] = obj == null ? "" : obj.ToString().Trim();}}}Range range = worksheet.Range[worksheet.Cells[1, 1], worksheet.Cells[curPageRowIndex + 1, dataTable.Columns.Count]];range.Value2 = pageData;  //当前页数据填充worksheet.Columns.EntireColumn.AutoFit();  //列宽自适应}if (fileName.Length > 0){workbook.Saved = true;workbook.SaveAs(fileName, XlFileFormat.xlWorkbookNormal,Type.Missing, Type.Missing, Type.Missing, Type.Missing,XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);}app.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);System.Runtime.InteropServices.Marshal.ReleaseComObject(app);GC.Collect();}

传入数据为  DataTable  格式。

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

  1. C#将DataTable海量数据导出到Excel

    http://blog.csdn.net/jadeflute/article/details/5853000 http://www.cnblogs.com/px7034/archive/2010/09 ...

  2. php 使用csv海量数据导出类

    <?php namespace Common\Tag; //海量数据导出csv class MassiveCSV{private $fp;//资源public function __constr ...

  3. POI报表——模板打印 AND 海量数据导出

    准备工作 导入POI的Jar包: maven工程需要在:Pom.xml文件中的xml配置 <dependency> <groupId>org.apache.poi</gr ...

  4. 【SSH框架/国际物流商综平台】-09 POI-SXSSFWorkbook 海量数据导出 细粒度权限控制 出口报运模块 打断设计+跳跃查询 内存监控工具jvisualvm

    回顾: 1.细粒度权限的控制 2.POI报表 八个步骤 3.Excel版本之间的区别 4.模板打印的步骤 1.制作模板 2.加载模板文件,得到工作簿 3.获取工作表 4.获取行对象 5.获取单元格对象 ...

  5. java导出为excel文件_java导出数据到excel文件

    有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...

  6. ftl模板导出excel_freemarker导出复杂Excel

    原文: freemarker导出复杂Excel date: 2017-04-20 12:39:04 [TOC] 序言 用Freemarker做Excel导出确实很容易. 但是导出复杂Excel, 例如 ...

  7. Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理

    Asp.net 2.0中新增的gridview控件,是十分强大的数据展示控件,在前面的系列文章里,分别展示了其中很多的基本用法和技巧(详见< ASP.NET 2.0中Gridview控件高级技巧 ...

  8. 将数据库查询结果导出成Excel表格

    使用Java代码,从数据库中获取结果集,将结果集导出成Excel表格形式. 从数据库中查询学生表所有数据,将其导出成Excel表格,点击查看学生表表结构 . package com.test.test ...

  9. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...

    如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...

最新文章

  1. 【C++】new和malloc的区别
  2. Mozilla与Ubisoft结盟一同开发AI替浏览器除错
  3. load方法引入本地html报错,分享基于plus.downloader的图片懒加载功能,支持本地缓存v1.1.0...
  4. 【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)
  5. [ACTF2020 新生赛]Include
  6. 迷宫问题(栈解决)--2015年8月9日19:23:23v1.0版
  7. 【实战】颠覆银行基础架构的区块链
  8. 流水账一周小记[2009-9-20]
  9. Python Gensim Word2Vec
  10. ADSL密码查看器.rar
  11. java技术可行性分析_Java可行性分析
  12. Isight做MATLAB优化,iSight结构优化基础16讲-学会使用isight控制ABAQUS、APDL等CAE软件...
  13. 2020字节跳动数据库面试题及答案
  14. String类12个常用的方法
  15. 华为笔记本键盘说明图_笔记本电脑键盘各键名称与位置(最好有图)
  16. Excel绘制折线图_基础整理
  17. The content of element type mapper must match (cache-ref|cache|resultMap*|parameterMap*|sql*|inse
  18. 内存不能为“read” “written”的解决方法
  19. 企业邮箱的优势有哪些
  20. Navicat 的使用

热门文章

  1. Auto.js实例找色
  2. 超简单vue-devtools工具安装
  3. lisp 天正标高_天正lisp文件夹_晓东CAD家园-论坛-A/VLISP-[求助]:怎样设置这个lisp里的读取文件...
  4. 《C++ primer plus》学习笔记
  5. 2021年T电梯修理考试试卷及T电梯修理证考试
  6. 攻防世界逆向高手题之re2-cpp-is-awesome
  7. 工程流体力学笔记暂记18(二元漩涡的速度和压强分布)
  8. 最新手机号正则表达式,及生成程序
  9. PPT模板哪里来——02
  10. kafka的基本概念和工作流程分析