即拿即用:

首先要下载npoi的dll,此不赘述,接着添加引用:

  1. using NPOI.HPSF;
  2. using NPOI.HSSF.UserModel;
  3. using NPOI.SS.UserModel;
  4. using NPOI.SS.Util;

下面是主要方法

  1. public class NPOIHelper
  2. {
  3. /// <summary>
  4. /// DataTable导出到Excel文件
  5. /// </summary>
  6. /// <param name="dtSource">源DataTable</param>
  7. /// <param name="strHeaderText">表头文本</param>
  8. /// <param name="strFileName">保存位置</param>
  9. public static void DataTableToExcel(DataTable dtSource, string strHeaderText, string strFileName)
  10. {
  11. using (MemoryStream ms = DataTableToExcel(dtSource, strHeaderText))
  12. {
  13. using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
  14. {
  15. byte[] data = ms.ToArray();
  16. fs.Write(data, , data.Length);
  17. fs.Flush();
  18. }
  19. }
  20. }
  21.  
  22. /// <summary>
  23. /// DataTable导出到Excel的MemoryStream
  24. /// </summary>
  25. /// <param name="dtSource">源DataTable</param>
  26. /// <param name="strHeaderText">表头文本</param>
  27. public static MemoryStream DataTableToExcel(DataTable dtSource, string strHeaderText)
  28. {
  29. HSSFWorkbook workbook = new HSSFWorkbook();
  30. HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
  31.  
  32. #region 右击文件 属性信息
  33. {
  34. DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
  35. dsi.Company = "NPOI";
  36. workbook.DocumentSummaryInformation = dsi;
  37.  
  38. SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
  39. si.Author = "文件作者信息"; //填加xls文件作者信息
  40. si.ApplicationName = "创建程序信息"; //填加xls文件创建程序信息
  41. si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息
  42. si.Comments = "作者信息"; //填加xls文件作者信息
  43. si.Title = "标题信息"; //填加xls文件标题信息
  44. si.Subject = "主题信息";//填加文件主题信息
  45. si.CreateDateTime = System.DateTime.Now;
  46. workbook.SummaryInformation = si;
  47. }
  48. #endregion
  49.  
  50. HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();
  51. HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();
  52. dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
  53. //边框
  54. dateStyle.BorderBottom = BorderStyle.Thin;
  55. dateStyle.BorderLeft = BorderStyle.Thin;
  56. dateStyle.BorderRight = BorderStyle.Thin;
  57. dateStyle.BorderTop = BorderStyle.Thin;
  58.  
  59. //取得列宽
  60. int[] arrColWidth = new int[dtSource.Columns.Count];
  61. foreach (DataColumn item in dtSource.Columns)
  62. {
  63. arrColWidth[item.Ordinal] = Encoding.GetEncoding().GetBytes(item.ColumnName.ToString()).Length;
  64. }
  65. for (int i = ; i < dtSource.Rows.Count; i++)
  66. {
  67. for (int j = ; j < dtSource.Columns.Count; j++)
  68. {
  69. int intTemp = Encoding.GetEncoding().GetBytes(dtSource.Rows[i][j].ToString()).Length;
  70. if (intTemp > arrColWidth[j])
  71. {
  72. arrColWidth[j] = intTemp;
  73. }
  74. }
  75. }
  76. int rowIndex = ;
  77. foreach (DataRow row in dtSource.Rows)
  78. {
  79. #region 新建表,填充表头,填充列头,样式
  80. if (rowIndex == || rowIndex == )
  81. {
  82. if (rowIndex != )
  83. {
  84. sheet = (HSSFSheet)workbook.CreateSheet();
  85. }
  86.  
  87. #region 表头及样式
  88. {
  89. HSSFRow headerRow = (HSSFRow)sheet.CreateRow();
  90. headerRow.HeightInPoints = ;
  91. headerRow.CreateCell().SetCellValue(strHeaderText);
  92.  
  93. HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
  94. headStyle.Alignment = HorizontalAlignment.Center;
  95.  
  96. HSSFFont font = (HSSFFont)workbook.CreateFont();
  97. font.FontHeightInPoints = ;
  98. font.Boldweight = ;
  99. headStyle.SetFont(font);
  100. headerRow.GetCell().CellStyle = headStyle;
  101. sheet.AddMergedRegion(new Region(, , , dtSource.Columns.Count - ));
  102.  
  103. }
  104. #endregion
  105.  
  106. #region 列头及样式
  107. {
  108. HSSFRow headerRow = (HSSFRow)sheet.CreateRow();
  109. HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
  110. headStyle.Alignment = HorizontalAlignment.Center;
  111.  
  112. //边框
  113. headStyle.BorderBottom = BorderStyle.Thin;
  114. headStyle.BorderLeft = BorderStyle.Thin;
  115. headStyle.BorderRight = BorderStyle.Thin;
  116. headStyle.BorderTop = BorderStyle.Thin;
  117.  
  118. HSSFFont font = (HSSFFont)workbook.CreateFont();
  119. font.FontHeightInPoints = ;
  120. font.Boldweight = ;
  121. headStyle.SetFont(font);
  122. foreach (DataColumn column in dtSource.Columns)
  123. {
  124. headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
  125. headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
  126.  
  127. //设置列宽
  128. sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + ) * );
  129. }
  130. // headerRow.Dispose();
  131. }
  132. #endregion
  133.  
  134. rowIndex = ;
  135. }
  136. #endregion
  137.  
  138. #region 填充内容
  139. HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
  140.  
  141. #region 边框,样式
  142.  
  143. HSSFCellStyle NewCellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
  144. NewCellStyle.Alignment = HorizontalAlignment.Center;
  145.  
  146. //边框
  147. NewCellStyle.BorderBottom = BorderStyle.Thin;
  148. NewCellStyle.BorderLeft = BorderStyle.Thin;
  149. NewCellStyle.BorderRight = BorderStyle.Thin;
  150. NewCellStyle.BorderTop = BorderStyle.Thin;
  151. #endregion
  152.  
  153. foreach (DataColumn column in dtSource.Columns)
  154. {
  155. HSSFCell newCell =(HSSFCell) dataRow.CreateCell(column.Ordinal);
  156.  
  157. string drValue = row[column].ToString();
  158.  
  159. switch (column.DataType.ToString())
  160. {
  161. case "System.String"://字符串类型
  162. newCell.SetCellValue(drValue);
  163. newCell.CellStyle = NewCellStyle;
  164. break;
  165. case "System.DateTime"://日期类型
  166. System.DateTime dateV;
  167. System.DateTime.TryParse(drValue, out dateV);
  168. newCell.SetCellValue(dateV);
  169.  
  170. newCell.CellStyle = dateStyle;//格式化显示
  171. break;
  172. case "System.Boolean"://布尔型
  173. bool boolV = false;
  174. bool.TryParse(drValue, out boolV);
  175. newCell.SetCellValue(boolV);
  176. newCell.CellStyle = NewCellStyle;
  177. break;
  178. case "System.Int16"://整型
  179. case "System.Int32":
  180. case "System.Int64":
  181. case "System.Byte":
  182. int intV = ;
  183. int.TryParse(drValue, out intV);
  184. newCell.SetCellValue(intV);
  185. newCell.CellStyle = NewCellStyle;
  186. break;
  187. case "System.Decimal"://浮点型
  188. case "System.Double":
  189. double doubV = ;
  190. double.TryParse(drValue, out doubV);
  191. newCell.SetCellValue(doubV);
  192. newCell.CellStyle = NewCellStyle;
  193. break;
  194. case "System.DBNull"://空值处理
  195. newCell.SetCellValue("");
  196. newCell.CellStyle = NewCellStyle;
  197. break;
  198. default:
  199. newCell.SetCellValue("");
  200. newCell.CellStyle = NewCellStyle;
  201. break;
  202. }
  203.  
  204. }
  205. #endregion
  206.  
  207. rowIndex++;
  208. }
  209. using (MemoryStream ms = new MemoryStream())
  210. {
  211. workbook.Write(ms);
  212. ms.Flush();
  213. ms.Position = ;
  214. return ms;
  215. }
  216. }
  217. }

后面调用这个类,如下:

  1. string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//取得当前桌面路径
  2.  
  3. NPOIHelper.DataTableToExcel(dt,"文档测试",dir+@"\测试.xls");

分享一个前辈的NPOIhelper的更多相关文章

  1. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  2. 分享一个MySQL分库分表备份脚本(原)

    分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...

  3. 分享一个与ABP配套使用的代码生成器源码

    点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...

  4. 分享一个常用Adb命令

    分享一个常用Adb命令 首先 首先感谢@xuxu的常用adb命令,收益良多,但是已经不能满足于我,所以补充了下. 再者 好久没发帖了,最近论坛老司机们都在讨论/总结,我就用这个干货回报吧. 最后 基于 ...

  5. 福利到~分享一个基于jquery的智能提示控件intellSeach.js

    一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...

  6. 分享一个oraclehelper

    分享一个拿即用的oraclehelper 首先要引用本机中的oralce access,如果是64位的话,也必须是64位运行,不然会报连接为空connection 等于null. using Orac ...

  7. 分享一个ruby网站 | 菜鸟教程

    http://www.runoob.com/ruby/ruby-tutorial.html 分享一个ruby网站.

  8. 分享一个批量导出当前实例下的所有linkedserver脚本

    分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linked ...

  9. 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框 ...

随机推荐

  1. Uva 2034

    求定积分 (结果当时我没看到平均值) //正常多项式求 #include<iostream> #include<cstdio> #include<cmath> us ...

  2. StartUML反向(逆向)Java工程通过代码生成类图

     在软件工程中,通过都是先了详细设计,然后按照详细设计来进行开发.在编写详细设计的时候,通常都会画一些类图.时序图.流程图等等UML设计,然后通过uml类图生成代码,这个属于正向工程生成代码,然而在实 ...

  3. 【GWAS文献解读】疟原虫青蒿素抗药性的全基因组关联分析

    英文名:Genetic architecture of artemisinin-resistant Plasmodium falciparum 中文名:疟原虫青蒿素抗药性的全基因组关联分析 期刊:Na ...

  4. %格式化和format格式化--python

    格式符 %[(name)][floags][width].[precision]typecode (name) 可选,用于选择指定的key flags 可选,可提供的值有: · + 右对齐,整数前加正 ...

  5. AngularJS 分页

    前端源码: <div> <h1>列表页33</h1> <table> <thead> <tr><td>CandiID ...

  6. canvas 画板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. 第一个JSP

    还是大一暑假学的Java,知识掌握了第一阶段的Java基础知识, 后面想自己进阶第二阶段,学习JavaWeb,一直拖到现在直接从Java第二阶段写了~~~ 希望指正: 这次主要还是第一个Hello W ...

  8. SpringMVC与Ajax交互

    1 springmvc和ajax的交互 1.1  请求字符串响应json 客户端发送的数据:key=value&key1=value1 响应回来:json 1.1.1json的支持jar包 1 ...

  9. 理解JavaScript中的作用域和上下文

    JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...

  10. B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用

    B树是为磁盘存储而专门设计的一类平衡搜索树,B树的高度仅随着它所包含的节点数按对数增长,不过因为单个节点可以包含多个关键字,所以对数的底数可以比较大,实际应用中一般是50~2000,给个直观的数字,一 ...