导出到Excel中NPOI
源地址:http://www.cnblogs.com/dreamof/archive/2010/06/02/1750151.html\
1、NPOI官方网站:http://npoi.codeplex.com/
可以到此网站上去下载最新的NPOI组件版本
2、NPOI在线学习教程(中文版):
http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html
感谢Tony Qu分享出NPOI组件的使用方法
3、.NET调用NPOI组件导入导出Excel的操作类
此NPOI操作类的优点如下:
(1)支持web及winform从DataTable导出到Excel;
(2)生成速度很快;
(3)准确判断数据类型,不会出现身份证转数值等问题;
(4)如果单页条数大于65535时会新建工作表;
(5)列宽自适应;
NPOI操作类
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/ --> 1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.HtmlControls;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.IO;
11 using System.Text;
12 using NPOI;
13 using NPOI.HPSF;
14 using NPOI.HSSF;
15 using NPOI.HSSF.UserModel;
16 using NPOI.HSSF.Util;
17 using NPOI.POIFS;
18 using NPOI.Util;
20 namespace PMS.Common
21 {
22 public class NPOIHelper
23 {
24 /// <summary>
25 /// DataTable导出到Excel文件
26 /// </summary>
27 /// <param name="dtSource">源DataTable</param>
28 /// <param name="strHeaderText">表头文本</param>
29 /// <param name="strFileName">保存位置</param>
30 public static void Export(DataTable dtSource,string strHeaderText,string strFileName)
31 {
32 using (MemoryStream ms= Export(dtSource, strHeaderText))
33 {
34 using (FileStream fs= new FileStream(strFileName, FileMode.Create, FileAccess.Write))
35 {
36 byte[] data = ms.ToArray();
37 fs.Write(data,0, data.Length);
38 fs.Flush();
39 }
40 }
41 }
42
43 /// <summary>
44 /// DataTable导出到Excel的MemoryStream
45 /// </summary>
46 /// <param name="dtSource">源DataTable</param>
47 /// <param name="strHeaderText">表头文本</param>
48 public static MemoryStream Export(DataTable dtSource,string strHeaderText)
49 {
50 HSSFWorkbook workbook= new HSSFWorkbook();
51 HSSFSheet sheet= workbook.CreateSheet();
52
53 #region 右击文件 属性信息
54 {
55 DocumentSummaryInformation dsi= PropertySetFactory.CreateDocumentSummaryInformation();
56 dsi.Company= "NPOI";
57 workbook.DocumentSummaryInformation= dsi;
58
59 SummaryInformation si= PropertySetFactory.CreateSummaryInformation();
60 si.Author= "文件作者信息";//填加xls文件作者信息
61 si.ApplicationName= "创建程序信息";//填加xls文件创建程序信息
62 si.LastAuthor= "最后保存者信息";//填加xls文件最后保存者信息
63 si.Comments= "作者信息";//填加xls文件作者信息
64 si.Title= "标题信息";//填加xls文件标题信息
65 si.Subject= "主题信息";//填加文件主题信息
66 si.CreateDateTime= DateTime.Now;
67 workbook.SummaryInformation= si;
68 }
69 #endregion
70
71 HSSFCellStyle dateStyle= workbook.CreateCellStyle();
72 HSSFDataFormat format= workbook.CreateDataFormat();
73 dateStyle.DataFormat= format.GetFormat("yyyy-mm-dd");
74
75 //取得列宽
76 int[] arrColWidth= newint[dtSource.Columns.Count];
77 foreach (DataColumn itemin dtSource.Columns)
78 {
79 arrColWidth[item.Ordinal]= Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
80 }
81 for (int i= 0; i< dtSource.Rows.Count; i++)
82 {
83 for (int j= 0; j< dtSource.Columns.Count; j++)
84 {
85 int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
86 if (intTemp > arrColWidth[j])
87 {
88 arrColWidth[j]= intTemp;
89 }
90 }
91 }
95 int rowIndex = 0;
97 foreach (DataRow rowin dtSource.Rows)
98 {
99 #region 新建表,填充表头,填充列头,样式
100 if (rowIndex == 65535|| rowIndex== 0)
101 {
102 if (rowIndex != 0)
103 {
104 sheet= workbook.CreateSheet();
105 }
106
107 #region 表头及样式
108 {
109 HSSFRow headerRow= sheet.CreateRow(0);
110 headerRow.HeightInPoints= 25;
111 headerRow.CreateCell(0).SetCellValue(strHeaderText);
112
113 HSSFCellStyle headStyle= workbook.CreateCellStyle();
114 headStyle.Alignment= CellHorizontalAlignment.CENTER;
115 HSSFFont font= workbook.CreateFont();
116 font.FontHeightInPoints= 20;
117 font.Boldweight= 700;
118 headStyle.SetFont(font);
119 headerRow.GetCell(0).CellStyle= headStyle;
120 sheet.AddMergedRegion(new Region(0,0, 0, dtSource.Columns.Count-1));
121 headerRow.Dispose();
122 }
123 #endregion
124
125
126 #region 列头及样式
127 {
128 HSSFRow headerRow= sheet.CreateRow(1);
131 HSSFCellStyle headStyle= workbook.CreateCellStyle();
132 headStyle.Alignment= CellHorizontalAlignment.CENTER;
133 HSSFFont font= workbook.CreateFont();
134 font.FontHeightInPoints= 10;
135 font.Boldweight= 700;
136 headStyle.SetFont(font);
139 foreach (DataColumn columnin dtSource.Columns)
140 {
141 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
142 headerRow.GetCell(column.Ordinal).CellStyle= headStyle;
143
144 //设置列宽
145 sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal]+ 1)* 256);
147 }
148 headerRow.Dispose();
149 }
150 #endregion
151
152 rowIndex= 2;
153 }
154 #endregion
155
156
157 #region 填充内容
158 HSSFRow dataRow= sheet.CreateRow(rowIndex);
159 foreach (DataColumn columnin dtSource.Columns)
160 {
161 HSSFCell newCell= dataRow.CreateCell(column.Ordinal);
162
163 string drValue= row[column].ToString();
164
165 switch (column.DataType.ToString())
166 {
167 case "System.String"://字符串类型
168 newCell.SetCellValue(drValue);
169 break;
170 case "System.DateTime"://日期类型
171 DateTime dateV;
172 DateTime.TryParse(drValue,out dateV);
173 newCell.SetCellValue(dateV);
174
175 newCell.CellStyle= dateStyle;//格式化显示
176 break;
177 case "System.Boolean"://布尔型
178 bool boolV = false;
179 bool.TryParse(drValue,out boolV);
180 newCell.SetCellValue(boolV);
181 break;
182 case "System.Int16"://整型
183 case "System.Int32":
184 case "System.Int64":
185 case "System.Byte":
186 int intV = 0;
187 int.TryParse(drValue,out intV);
188 newCell.SetCellValue(intV);
189 break;
190 case "System.Decimal"://浮点型
191 case "System.Double":
192 double doubV = 0;
193 double.TryParse(drValue,out doubV);
194 newCell.SetCellValue(doubV);
195 break;
196 case "System.DBNull"://空值处理
197 newCell.SetCellValue("");
198 break;
199 default:
200 newCell.SetCellValue("");
201 break;
202 }
203
204 }
205 #endregion
206
207 rowIndex++;
208 }
211 using (MemoryStream ms= new MemoryStream())
212 {
213 workbook.Write(ms);
214 ms.Flush();
215 ms.Position= 0;
216
217 sheet.Dispose();
218 //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet
219 return ms;
220 }
222 }
223
224 /// <summary>
225 /// 用于Web导出
226 /// </summary>
227 /// <param name="dtSource">源DataTable</param>
228 /// <param name="strHeaderText">表头文本</param>
229 /// <param name="strFileName">文件名</param>
230 public static void ExportByWeb(DataTable dtSource,string strHeaderText,stringstrFileName)
231 {
233 HttpContext curContext= HttpContext.Current;
234
235 // 设置编码和附件格式
236 curContext.Response.ContentType= "application/vnd.ms-excel";
237 curContext.Response.ContentEncoding= Encoding.UTF8;
238 curContext.Response.Charset= "";
239 curContext.Response.AppendHeader("Content-Disposition",
240 "attachment;filename="+ HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
241
242 curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
243 curContext.Response.End();
245 }
247
248 /// <summary>读取excel
249 /// 默认第一行为标头
250 /// </summary>
251 /// <param name="strFileName">excel文档路径</param>
252 /// <returns></returns>
253 public static DataTable Import(string strFileName)
254 {
255 DataTable dt= new DataTable();
256
257 HSSFWorkbook hssfworkbook;
258 using (FileStream file= new FileStream(strFileName, FileMode.Open, FileAccess.Read))
259 {
260 hssfworkbook= new HSSFWorkbook(file);
261 }
262 HSSFSheet sheet= hssfworkbook.GetSheetAt(0);
263 System.Collections.IEnumerator rows= sheet.GetRowEnumerator();
264
265 HSSFRow headerRow= sheet.GetRow(0);
266 int cellCount= headerRow.LastCellNum;
267
268 for (int j= 0; j< cellCount; j++)
269 {
270 HSSFCell cell= headerRow.GetCell(j);
271 dt.Columns.Add(cell.ToString());
272 }
273
274 for (int i= (sheet.FirstRowNum+ 1); i<= sheet.LastRowNum; i++)
275 {
276 HSSFRow row= sheet.GetRow(i);
277 DataRow dataRow= dt.NewRow();
278
279 for (int j= row.FirstCellNum; j< cellCount; j++)
280 {
281 if (row.GetCell(j)!= null)
282 dataRow[j]= row.GetCell(j).ToString();
283 }
284
285 dt.Rows.Add(dataRow);
286 }
287 return dt;
288 }
289 }
290 }
291
4、NPOI操作类的调用方法
DataTable dt_Grade = Tools.Data.GetDataTable(strSQL);
filename += "绩效考核结果分数统计表";
PMS.Common.NPOIHelper.ExportByWeb(dt_Grade, filename, filename+".xls");
5、效果展示

6、NPOI类库下载:http://files.cnblogs.com/dreamof/NPOI类库.rar
信息来源:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.html
导出到Excel中NPOI的更多相关文章
- 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>
前台datagrid数据绑定 #region 导出到excel中 /// <summary> /// 2014-6-6 /// </summary> / ...
- 将Datagridview中的数据导出至Excel中
首先添加一个模块ImportToExcel,并添加引用 然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...
- Winform 中 dataGridView 导出到Excel中的方法总结
最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个 DataGridV ...
- HTML table导出到Excel中的解决办法
第一部分:html+js 1.需要使用的表格数据(先不考虑动态生成的table) <table class="table tableStyles" id="tabl ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- C# html的Table导出到Excel中
C#中导出Excel分为两大类.一类是Winform的,一类是Web.今天说的这一种是Web中的一种,把页面上的Table部分导出到Excel中. Table导出Excel,简单点说,分为以下几步: ...
- 把数据库里面的stu表中的数据,导出到excel中
# 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- jsp 页面内容导出到Excel中
日常使用网络资源时经常需要把网页中的内容下载到本地,并且导出到Excel中,现在介绍一种非常简单的方式实现网络资源的下载.只需要讲jsp的最上面加上一句话 <% response.reset() ...
随机推荐
- 《手把手教你学C语言》学习笔记(8)--- 运算符和表达式
C语言编程的核心是指针和库,而库的核心就是函数,函数的基本组成部分就是语句. C语言合法表达式加上分号(语句结束符)构成C函数的基本部分语句.如果只有分号没有表达式就构成空语句,空语句常常用来形成占位 ...
- 了解Binder机制原理和底层实现
参考:http://www.2cto.com/kf/201606/515548.html 1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Andr ...
- OpenMP参考链接
做个笔记. http://www.cnblogs.com/China3S/p/3500507.html
- win7 64位数据库连接问题:在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
通过ODBC/JDBC连接程序和数据库时,异常报错“在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”的解决办法 本机:64位win7,64位JDK,做Web实验用32位myeclipse ...
- https的实现原理
加密算法 有两种基本的加解密算法类型: 1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES等: 2)非对称加密:密钥成对出现(且根据公钥无法推知私钥, ...
- ssh免秘钥登陆实现
1.用处 搭建集群或者工作中登陆跳板机经常需要做免秘钥互相登陆彼此服务器. 2. 准备工作 假设A主机10.20.0.1想通过ssh登录到B主机10.20.0.2上. 那么客户端(A主机)需要 ...
- Windows 远程桌面文件传输的方法
实现电脑的远程连接以后,很多时候会需要进行主机间的文件传输,这个时候就可以用系统自带的远程连接里的磁盘映射来完成,详细如下: 远程桌面程序内置了映射磁盘的功能,通过这个功能可以实现远程登录服务器时自动 ...
- shell中eval的使用问题
转载:http://www.blogjava.net/jasmine214--love/archive/2010/11/26/339106.html 本文将会讲解一些linux中命令的使用与技巧希望对 ...
- Manifest值冲突解决方法
FBI Warning:欢迎转载,但请标明出处:http://blog.csdn.net/codezjx/article/details/38669939,未经本人同意请勿用于商业用途,感谢支持! 整 ...
- oracle exchange partition 測试
Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据.注意不是将表转换成分区或非分区的形式,而仅仅仅是迁移表中数 据(互相迁移),因为其号称是採用了更改数据字典的 ...