1. public static class ExcelUtil
  2. {
  3. // Methods
  4. public static DataTable GetDataTable(Stream stream)
  5. {
  6. HSSFWorkbook workbook;
  7. try
  8. {
  9. workbook = new HSSFWorkbook(stream);
  10. }
  11. catch (Exception exception)
  12. {
  13. throw exception;
  14. }
  15. ISheet sheetAt = workbook.GetSheetAt();
  16. IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
  17. DataTable table = new DataTable();
  18. IRow row = sheetAt.GetRow();
  19. if (row != null)
  20. {
  21. for (int j = ; j < row.LastCellNum; j++)
  22. {
  23. ICell cell = row.GetCell(j);
  24. if (cell == null)
  25. {
  26. table.Columns.Add("cell" + j.ToString());
  27. }
  28. else
  29. {
  30. table.Columns.Add(cell.ToString());
  31. }
  32. }
  33. }
  34. int count = table.Columns.Count;
  35. for (int i = ; rowEnumerator.MoveNext(); i++)
  36. {
  37. if (i > )
  38. {
  39. IRow current = (HSSFRow) rowEnumerator.Current;
  40. DataRow row3 = table.NewRow();
  41. for (int k = ; k < count; k++)
  42. {
  43. ICell cell2 = current.GetCell(k);
  44. if (cell2 == null)
  45. {
  46. row3[k] = null;
  47. }
  48. else
  49. {
  50. row3[k] = cell2.ToString();
  51. }
  52. }
  53. table.Rows.Add(row3);
  54. }
  55. }
  56. return table;
  57. }
  58.  
  59. public static DataTable GetDataTable(string filePath)
  60. {
  61. HSSFWorkbook workbook;
  62. try
  63. {
  64. using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  65. {
  66. workbook = new HSSFWorkbook(stream);
  67. }
  68. }
  69. catch (Exception exception)
  70. {
  71. throw exception;
  72. }
  73. ISheet sheetAt = workbook.GetSheetAt();
  74. IEnumerator rowEnumerator = sheetAt.GetRowEnumerator();
  75. DataTable table = new DataTable();
  76. IRow row = sheetAt.GetRow();
  77. if (row != null)
  78. {
  79. for (int j = ; j < row.LastCellNum; j++)
  80. {
  81. ICell cell = row.GetCell(j);
  82. if (cell == null)
  83. {
  84. table.Columns.Add("cell" + j.ToString());
  85. }
  86. else
  87. {
  88. table.Columns.Add(cell.ToString());
  89. }
  90. }
  91. }
  92. int count = table.Columns.Count;
  93. for (int i = ; rowEnumerator.MoveNext(); i++)
  94. {
  95. if (i > )
  96. {
  97. IRow current = (HSSFRow) rowEnumerator.Current;
  98. DataRow row3 = table.NewRow();
  99. for (int k = ; k < count; k++)
  100. {
  101. ICell cell2 = current.GetCell(k);
  102. if (cell2 == null)
  103. {
  104. row3[k] = null;
  105. }
  106. else
  107. {
  108. row3[k] = cell2.ToString();
  109. }
  110. }
  111. table.Rows.Add(row3);
  112. }
  113. }
  114. return table;
  115. }
  116.  
  117. /// <summary>
  118. /// 导入数据到excel文件
  119. /// </summary>
  120. /// <param name="data">待导入的数据</param>
  121. /// <param name="fileName">文件路径</param>
  122. /// <param name="sheetName">excel表名</param>
  123. /// <param name="hiddenColmnIndexs">隐藏列索引</param>
  124. /// <param name="header">列头字典;原始列头=>重命名列名</param>
  125. /// <param name="redHeaderClomnIndexs">标记红色加粗的列索引</param>
  126. /// <param name="comments">列头批注字典;列名=>批注内容</param>
  127. /// <returns></returns>
  128. public static string SetDataTableToExcel(DataTable data,string fileName, string sheetName, int[] hiddenColmnIndexs = null, Dictionary<string, string> header = null,int[] redHeaderClomnIndexs = null,Dictionary<string,string> comments= null)
  129. {
  130. int num4 = ;
  131. int num = ;
  132. int column = ;
  133. int rownum = ;
  134. ISheet sheet = null;
  135. IWorkbook workbook = new HSSFWorkbook();
  136. //todo:tans
  137. var stream = new FileStream(fileName ,FileMode.OpenOrCreate,FileAccess.ReadWrite);
  138.  
  139. try
  140. {
  141. sheet = workbook.CreateSheet(sheetName);
  142.  
  143. IRow row = sheet.CreateRow();
  144. column = ;
  145. int maxCount = Math.Max(header!=null ? header.Count : , data.Columns.Count);
  146.  
  147. IDrawing patr1 = sheet.CreateDrawingPatriarch();// as HSSFPatriarch;
  148. //创建列头
  149. while (column < data.Columns.Count)
  150. {
  151. var col = data.Columns[column];
  152. var colName = col.ColumnName;
  153. ICell cell = row.GetCell(column);
  154. if (header!=null && header.ContainsKey(colName))
  155. {
  156. string temp = header[colName];//列重命名
  157. header.Remove(colName);
  158. cell = row.CreateCell(column);
  159. cell.SetCellValue(temp);
  160. }
  161. //创建批注
  162. colName = cell.StringCellValue;
  163. if (comments!=null && comments.ContainsKey(colName))
  164. {
  165. var commentStr = comments[colName];
  166. IComment comment1 = patr1.CreateCellComment(new HSSFClientAnchor(, , , , , , , ));// as HSSFComment;
  167. comment1.String = new HSSFRichTextString(commentStr);
  168. cell.CellComment = comment1;
  169. }
  170. column++;
  171. }
  172. //附加列头
  173. int colCount = data.Columns.Count;
  174. foreach (var colName in header.Keys)
  175. {
  176. row.CreateCell(colCount).SetCellValue(header[colName]);
  177. colCount++;
  178. }
  179. //设置列头样式
  180. redHeaderClomnIndexs = redHeaderClomnIndexs ?? new int[]{};
  181. for (int i = , l=, rl= redHeaderClomnIndexs.Length; i < row.Cells.Count; i++,l++)
  182. {
  183. var cell = row.GetCell(i);
  184. if (cell==null)
  185. {
  186. continue;
  187. }
  188. //设置字体
  189. IFont font = workbook.CreateFont();
  190. font.Boldweight = (short)FontBoldWeight.BOLD;
  191. if (l < rl)
  192. {
  193. int index = redHeaderClomnIndexs[l];
  194. cell = row.GetCell(index);
  195. font.Color = (short)FontColor.RED;
  196. }
  197. //设置样式
  198. ICellStyle style = workbook.CreateCellStyle();
  199. style.Alignment = HorizontalAlignment.CENTER;
  200. style.SetFont(font);
  201.  
  202. cell.CellStyle = style;
  203. }
  204. //创建数据列,并填充数据
  205. rownum = ;
  206. for (num = ; num < data.Rows.Count; num++)
  207. {
  208. IRow row2 = sheet.CreateRow(rownum);
  209. for (column = ; column < data.Columns.Count; column++)
  210. {
  211. row2.CreateCell(column).SetCellValue(data.Rows[num][column].ToString());
  212. }
  213. rownum++;
  214. }
  215. //设置隐藏列
  216. if (hiddenColmnIndexs != null && hiddenColmnIndexs.Length <= column)
  217. {
  218. for (int i = , l = hiddenColmnIndexs.Length; i < l; i++)
  219. {
  220. sheet.SetColumnHidden(hiddenColmnIndexs[i], true);
  221. }
  222. }
  223. //当创建完毕所有cell,设置居中才有效
  224. for (int i = ; i < row.Cells.Count; i++)
  225. {
  226. sheet.AutoSizeColumn(i);
  227. }
  228. workbook.Write(stream);
  229. }
  230. catch (Exception ex)
  231. {
  232. return null;
  233. }
  234. finally
  235. {
  236. stream.Close();
  237. }
  238. return fileName;
  239. }
  240. }

NPOI 操作笔记的更多相关文章

  1. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...

  2. NPOI操作Excel辅助类

    /// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...

  3. 数据字典生成工具之旅(4):NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  4. NPOI操作excel之写入数据到excel表

    在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...

  5. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  6. 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数

    2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数   NPOI教程:http://www.cnb ...

  7. 使用 WeihanLi.Npoi 操作 CSV

    使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用 ...

  8. Centos7系统下修改主机名操作笔记

    习惯了在Centos6系统下修改主机名的操作,但是Centos7下修改主机名的操作却大不相同!操作笔记如下: 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient) ...

  9. C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

随机推荐

  1. python轻量级orm

    python下的orm使用SQLAlchemy比较多,用了一段时间感觉不顺手,主要问题是SQLAlchemy太重,所以自己写了一个orm,实现方式和netsharp类似,oql部分因为代码比较多,没有 ...

  2. idea+tomcat 端口占用

    ntelliJ IDEA和Tomcat整合注意事项(转) 这两天一直在学习IDEA这个开发工具,今天再整合tomcat的时候遇到了问题,运行时总是报错,说是8080端口被占用,把我就搞的郁闷了,我就尝 ...

  3. Python10/17-re模块/hashlib模块/logging模块

    import logging # 1.日志的级别# logging.debug("这是一个调试信息") # 10# logging.info("常规信息") # ...

  4. fiddler抓包时显示Tunnel to......443是怎么回事

    之前公司的app使用的http协议,因此不需要安装证书也能够转包. 后来改成https协议后,在使用fiddler进行抓包时,一直出现tunnel to 443. 百度了好久也没有具体的解决办法,后来 ...

  5. TP5在lnmp环境中不能重写的问题

    说到坑,这个问题困扰了我一两天时间,本地可以,线上环境检查了好久. 基本检查的地方有几个了,首先就是nginx下面的重写配置,这个大家在网上都能搜到,至于定义的变量和配置路径,修改一下即可. 还有就是 ...

  6. IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA环境搭建,JPA实现非字符型设置长度

    1.在github上已有配置环境,如下链接,(需要环境JDK1.8及以上版本,Tomcat1.8及以上版本,搭建maven库,使用编译器IntellJ IDEA) https://github.com ...

  7. 学以致用十八-----shell脚本之基础概念及变量

    1.脚本脚本,说了很多年的脚本,一直都没怎么弄明白为什么叫脚本,还仅仅是script翻译过来的?今天再查看翻译,查阅了资料,对脚本有了个新的认识. script也叫剧本,脚本---剧本,像剧本一样,让 ...

  8. php 大文件上传的实现

    最近公司做工程项目,实现大文件上传 网上找了很久,发现网上很多代码大都存在很多问题,不过还是让我找到了一个符合要求的项目. 工程: 对项目的文件上传功能做出分析,找出文件上传的原理,对文件的传输模式深 ...

  9. 严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关

    “-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”.“-O3”和“-Os”时,默认会打开“ ...

  10. 用jquery制作一个二级导航下拉菜单

    1使用$(function(){...})获取到想要作用的HTML元素. 2通过使用children()方法寻找子元素.       3通过使用show()方法来显示HTML元素.       4通过 ...