使用NPOI导出DataTable到Excel
使用C#对DataTable导出到Excel是我们工作当中比较多用到的场景,微软提供了Microsoft.Office.Interop.Excel组件可以进行操作,但是该组件在数据量大的时候速度很慢,可以参考stackoverflow上的提问(Microsoft.Office.Interop.Excel really slow),所以我又找了一些其它的开源组件,比如著名的OpenXML,但是它不支持.NET 2.0了。终于在stackoverflow上看到有人说NPOI,试了一下,速度果然很快,而且从.NET2.0到4.0都支持,附一下导出的代码吧
using System;
using System.IO;
using System.Data;
using System.Collections.Generic;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.HSSF.Util;
using NPOI.POIFS.FileSystem;
using NPOI.HPSF; public class NpoiExport
{
const int MaximumNumberOfRowsPerSheet = ;
protected HSSFWorkbook workbook { get; set; } public NpoiExport()
{
this.workbook = new HSSFWorkbook();
} protected ISheet CreateExportDataTableSheetAndHeaderRow(DataTable exportData)
{
var sheet = this.workbook.CreateSheet("Sheet1"); // Create the header row
var row = sheet.CreateRow(); for (var colIndex = ; colIndex < exportData.Columns.Count; colIndex++)
{
var cell = row.CreateCell(colIndex);
cell.SetCellValue(exportData.Columns[colIndex].ColumnName);
} return sheet;
} public void ExportDataTableToWorkbook(DataTable exportData)
{
// Create the header row cell style
var headerLabelCellStyle = this.workbook.CreateCellStyle();
//headerLabelCellStyle.BorderBottom = CellBorderType.THIN;
var headerLabelFont = this.workbook.CreateFont();
headerLabelFont.Boldweight = (short)FontBoldWeight.BOLD;
headerLabelCellStyle.SetFont(headerLabelFont); var sheet = CreateExportDataTableSheetAndHeaderRow(exportData);
var currentNPOIRowIndex = ;
var sheetCount = ; for (var rowIndex = ; rowIndex < exportData.Rows.Count; rowIndex++)
{
if (currentNPOIRowIndex >= MaximumNumberOfRowsPerSheet)
{
sheetCount++;
currentNPOIRowIndex = ; sheet = CreateExportDataTableSheetAndHeaderRow(exportData);
} var row = sheet.CreateRow(currentNPOIRowIndex++); for (var colIndex = ; colIndex < exportData.Columns.Count; colIndex++)
{
var cell = row.CreateCell(colIndex);
cell.SetCellValue(exportData.Rows[rowIndex][colIndex].ToString());
}
}
} public void ExportDataTableToExcel(DataTable exportData, string filePath)
{
this.ExportDataTableToWorkbook(exportData);
using (FileStream sw = File.Create(filePath, , FileOptions.WriteThrough))
{
this.workbook.Write(sw);
}
} }
调用的时候也很简单,直接调用ExportDataTableToExcel方法就可以了
附参考文章地址:
1、http://scottonwriting.net/sowblog/archive/2011/06/08/export-an-ado-net-datatable-to-excel-using-npoi.aspx
2、http://dotnetslackers.com/articles/aspnet/Create-Excel-Spreadsheets-Using-NPOI.aspx
使用NPOI导出DataTable到Excel的更多相关文章
- 使用NPOI导出,读取EXCEL(可追加功能)
使用NPOI导出,读取EXCEL,具有可追加功能 看代码 using System; using System.Collections.Generic; using System.Text; usin ...
- NPOI导出数据到Excel
NPOI导出数据到Excel 前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微 ...
- 简洁的导出 datatable到excel,不用组件
简洁的导出 datatable到excel var lines = new List<string>(); string[] columnNames = dataTable.Columns ...
- 基于NPOI导出和导入Excel
概述 NPOI,顾名思义,就是POI的.NET版本.NPOI就是用.NET语言编写的一套数据导出Excel的开源项目,支持XML.xls.xlsx.ppt等格式..NET不仅实现Excel导出还可以实 ...
- 用NPOI从DataTable到Excel,向Excel模板填充数据
DataTable---->Excel,填充数据 private IWorkbook workbook = null; private ISheet sheet = null; private ...
- 使用NPOI导出图片到EXCEL
1.首先引用NPOI 2.本例用到的引用 3.在Controller里面添加导出方法 public ActionResult ExportMsgData(string term) { //为list赋 ...
- 使用NPOI将DataTable生成Excel
听闻npoi 2.0版本支持excel2007格式了,表示期待其表现.不过目前还是使用1.2.5稳重点. 生活中有太多的列表都需要一个导出功能,当然这里的生活指的的程序员的生活.DataTable是从 ...
- ashx导出dataTable为Excel
一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary> /// DataTable导出到Excel /// </summary> /// ...
- ef+Npoi导出百万行excel之踩坑记
最近在做一个需求是导出较大的excel,本文是记录我在做需求过程中遇到的几个问题和解题方法,给大家分享一下,一来可以帮助同样遇到问题的朋友,二呢,各位大神也许有更好的方法可以指点小弟一 ...
随机推荐
- js获取浏览器高度和宽度值,尽量的考虑了多浏览器。
js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ...
- 用Python组合Celery Redis RabbitMQ进行分布式数据抓取
首先,记录下遇到的问题吧,在抓取的过程中为了避免IO操作,主要用Redis做插入缓存,当内存占用率很大时,会周期性的持续到Mysql里 虽然是拆东墙补西墙,但把数据抓取完毕后持续化可以慢慢进行,毕竟数 ...
- [转]对Android开发者有益的40条优化建议
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...
- leetcode–jump game II
1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...
- 200 OK (from cache) 与 304 Not Modified
解释: 200 OK (from cache) 是浏览器没有跟服务器确认,直接用了浏览器缓存: 304 Not Modified 是浏览器和服务器多确认了一次缓存有效性,再用的缓存. 触发区别: 2 ...
- 编译python3
安装环境 yum install gcc yum install zlib-devel yum install make 下载python版本 wget http://www.python.org/f ...
- HDU ACM 1515 Anagrams by Stack
Anagrams by Stack Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 新 esb-cs-tool.jar 参数说明
旧esb-cs-tool.jar 使用说明 : invoke(RequestBusinessObject requestBo) 旧参数说明: requestBo : 封装好的请求参数大对象 Req ...
- PCB中层的定义(一)
- js关闭当前页面(窗口)的几种方式总结
1. 不带任何提示关闭窗口的js代码 <a href="javascript:window.opener=null;window.open('','_self');window.clo ...