导出到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() ...
随机推荐
- HDU5006 Resistance(高斯消元)
给你一个复杂的网路图,然后告诉你s,t,求s,t的等效电阻.方法是设s的电势为1,t的电势为0.然后对于其它的每个点x,满足的是sigma(ux-uy)/R(x,y)(即对每个与x相连的节点y,电势差 ...
- 洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】
题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,2 ...
- Linux shell 环境变量及有效范围
每当我们使用ssh客户端远程登陆一个服务时,操作系统就会给我们分配一个新的shell,并且这个shell继承了操作系统的永久环境变量.在当前的shell执行一个sh文件,都会临时产生一个子shell, ...
- 洛谷——P1119 灾后重建
P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重 ...
- 伪造服务钓鱼工具Ghost Phisher
伪造服务钓鱼工具Ghost Phisher Ghost Phisher是一款支持有线网络和无线网络的安全审计工具.它通过伪造服务的方式,来收集网络中的有用信息.它不仅可以伪造AP,还可以伪造DNS ...
- 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源
我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...
- Assembly.CreateInstance和Activator.CreateInstance
本来是在设计模式中的工厂方法,在实现抽象工厂时,用到了一直都不熟悉的反射. namespace Factory { public abstract class Factory { public abs ...
- ci框架文件上传
控制器类代码 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Upload ex ...
- Linux下测试PHP和MySQL是否正确安装
测试PHP: 本打算这样配置: 1.拷贝PHP配置文件 cd /usr/local/php/etc cp php.ini /usr/local/php/lib/php.ini 2.修改apache配置 ...
- ADO.NET:连接数据字符串
ylbtech-ADO.NET:ADO.NET-Oracle|SQLServer|MySql|Access|Excel-dddd ADO.NET:连接数据字符串 1.A,SqlServer返回顶部 1 ...