源地址: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)列宽自适应;

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

  1. 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>

    前台datagrid数据绑定 #region 导出到excel中    /// <summary>    /// 2014-6-6    /// </summary>    / ...

  2. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  3. Winform 中 dataGridView 导出到Excel中的方法总结

    最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个  DataGridV ...

  4. HTML table导出到Excel中的解决办法

    第一部分:html+js 1.需要使用的表格数据(先不考虑动态生成的table) <table class="table tableStyles" id="tabl ...

  5. 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; ...

  6. C# html的Table导出到Excel中

    C#中导出Excel分为两大类.一类是Winform的,一类是Web.今天说的这一种是Web中的一种,把页面上的Table部分导出到Excel中. Table导出Excel,简单点说,分为以下几步: ...

  7. 把数据库里面的stu表中的数据,导出到excel中

    # 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...

  8. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  9. jsp 页面内容导出到Excel中

    日常使用网络资源时经常需要把网页中的内容下载到本地,并且导出到Excel中,现在介绍一种非常简单的方式实现网络资源的下载.只需要讲jsp的最上面加上一句话 <% response.reset() ...

随机推荐

  1. HDU5006 Resistance(高斯消元)

    给你一个复杂的网路图,然后告诉你s,t,求s,t的等效电阻.方法是设s的电势为1,t的电势为0.然后对于其它的每个点x,满足的是sigma(ux-uy)/R(x,y)(即对每个与x相连的节点y,电势差 ...

  2. 洛谷 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 ...

  3. Linux shell 环境变量及有效范围

    每当我们使用ssh客户端远程登陆一个服务时,操作系统就会给我们分配一个新的shell,并且这个shell继承了操作系统的永久环境变量.在当前的shell执行一个sh文件,都会临时产生一个子shell, ...

  4. 洛谷——P1119 灾后重建

    P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重 ...

  5. 伪造服务钓鱼工具Ghost Phisher

    伪造服务钓鱼工具Ghost Phisher   Ghost Phisher是一款支持有线网络和无线网络的安全审计工具.它通过伪造服务的方式,来收集网络中的有用信息.它不仅可以伪造AP,还可以伪造DNS ...

  6. 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源

    我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...

  7. Assembly.CreateInstance和Activator.CreateInstance

    本来是在设计模式中的工厂方法,在实现抽象工厂时,用到了一直都不熟悉的反射. namespace Factory { public abstract class Factory { public abs ...

  8. ci框架文件上传

    控制器类代码 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Upload ex ...

  9. Linux下测试PHP和MySQL是否正确安装

    测试PHP: 本打算这样配置: 1.拷贝PHP配置文件 cd /usr/local/php/etc cp php.ini /usr/local/php/lib/php.ini 2.修改apache配置 ...

  10. ADO.NET:连接数据字符串

    ylbtech-ADO.NET:ADO.NET-Oracle|SQLServer|MySql|Access|Excel-dddd ADO.NET:连接数据字符串 1.A,SqlServer返回顶部 1 ...