一、NPOI简介

NPOI是一个开源项目,可以读/写xls,doc,ppt文件,有着广泛的应用。

使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

CodeFlex地址:http://npoi.codeplex.com/

Nuget地址:https://www.nuget.org/packages/NPOI

二、安装

Nuget命令

  1. Install-Package NPOI

或者使用Nuget包管理安装

安装结果:

三、Excel操作示例

1.Excel函数问题:

  • Excel 2003版本,最大行数是65536行。

    1. HSSFWorkbook workbook = new HSSFWorkbook();
  • Excel 2007版本以上,最大行数是1048576行。
    1. XSSFWorkbook workbook = new XSSFWorkbook();

2.创建Excel文件,并写入数据

  1. //创建工作簿
  2. HSSFWorkbook wk = new HSSFWorkbook();
  3. //创建名称为mySheet的表
  4. ISheet tb = wk.CreateSheet("mySheet");
  5. //创建第一行,此行为第二行
  6. IRow row = tb.CreateRow();
  7. for (int i = ; i < ; i++)
  8. {
  9. ICell cell = row.CreateCell(i); //创建单元格,写入数据
  10. cell.SetCellValue(i);
  11. }
  12.  
  13. //保存到文件
  14. //打开一个xls文件,如果没有自行创建
  15. //如果存在则重新创建
  16. using (FileStream fs = File.OpenWrite(LocalPathHelper.GetCurrentData() + "\\testone.xls"))
  17. {
  18. wk.Write(fs);
  19. Console.WriteLine("导出数据成功!");
  20. }

3.创建Excel文件并设置单元格样式

  1. /// <summary>
  2. /// 创建xml 常用操作
  3. /// </summary>
  4. public static void TestTwo()
  5. {
  6. IWorkbook wb = new HSSFWorkbook();
  7. //创建表
  8. ISheet sh = wb.CreateSheet("zhiyuan");
  9. //设置单元的宽度
  10. sh.SetColumnWidth(, * );
  11. sh.SetColumnWidth(, * );
  12. sh.SetColumnWidth(, * );
  13. sh.SetColumnWidth(, * );
  14. int i = ;
  15.  
  16. #region 练习合并单元格
  17. sh.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(, , , ));
  18. //CellRangeAddress()该方法的参数次序是:开始行号,结束行号,开始列号,结束列号。
  19. IRow row0 = sh.CreateRow();
  20. row0.Height = * ;
  21. ICell icell1top0 = row0.CreateCell();
  22. icell1top0.CellStyle = Getcellstyle(wb, stylexls.头);
  23. icell1top0.SetCellValue("标题合并单元");
  24. #endregion
  25.  
  26. i++;
  27. #region 设置表头
  28. IRow row1 = sh.CreateRow();
  29. row1.Height = * ;
  30.  
  31. ICell icell1top = row1.CreateCell();
  32. icell1top.CellStyle = Getcellstyle(wb, stylexls.头);
  33. icell1top.SetCellValue("网站名");
  34.  
  35. ICell icell2top = row1.CreateCell();
  36. icell2top.CellStyle = Getcellstyle(wb, stylexls.头);
  37. icell2top.SetCellValue("网址");
  38.  
  39. ICell icell3top = row1.CreateCell();
  40. icell3top.CellStyle = Getcellstyle(wb, stylexls.头);
  41. icell3top.SetCellValue("百度快照");
  42.  
  43. ICell icell4top = row1.CreateCell();
  44. icell4top.CellStyle = Getcellstyle(wb, stylexls.头);
  45. icell4top.SetCellValue("百度收录");
  46. #endregion
  47.  
  48. using (FileStream stm = File.OpenWrite(LocalPathHelper.GetCurrentData() + "\\site.xls"))
  49. {
  50. wb.Write(stm);
  51. Console.WriteLine("导出数据成功");
  52. }
  53. }
  54. #region 定义单元格常用到样式的枚举
  55. public enum stylexls
  56. {
  57. 头,
  58. url,
  59. 时间,
  60. 数字,
  61. 钱,
  62. 百分比,
  63. 中文大写,
  64. 科学计数法,
  65. 默认
  66. }
  67. #endregion
  68. #region 定义单元格常用到样式
  69. static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
  70. {
  71. ICellStyle cellStyle = wb.CreateCellStyle();
  72.  
  73. //定义几种字体
  74. //也可以一种字体,写一些公共属性,然后在下面需要时加特殊的
  75. IFont font12 = wb.CreateFont();
  76. font12.FontHeightInPoints = ;
  77. font12.FontName = "微软雅黑";
  78.  
  79. IFont font = wb.CreateFont();
  80. font.FontName = "微软雅黑";
  81. //font.Underline = 1;下划线
  82.  
  83. IFont fontcolorblue = wb.CreateFont();
  84. fontcolorblue.Color = HSSFColor.OliveGreen.Blue.Index;
  85. fontcolorblue.IsItalic = true;//下划线
  86. fontcolorblue.FontName = "微软雅黑";
  87.  
  88. //边框
  89. cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Dotted;
  90. cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
  91. cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
  92. cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Dotted;
  93. //边框颜色
  94. cellStyle.BottomBorderColor = HSSFColor.OliveGreen.Blue.Index;
  95. cellStyle.TopBorderColor = HSSFColor.OliveGreen.Blue.Index;
  96.  
  97. //背景图形,我没有用到过。感觉很丑
  98. cellStyle.FillForegroundColor = HSSFColor.White.Index;
  99. // cellStyle.FillPattern = FillPatternType.NO_FILL;
  100. cellStyle.FillBackgroundColor = HSSFColor.Blue.Index;
  101.  
  102. //水平对齐
  103. cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
  104.  
  105. //垂直对齐
  106. cellStyle.VerticalAlignment = VerticalAlignment.Center;
  107.  
  108. //自动换行
  109. cellStyle.WrapText = true;
  110.  
  111. //缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对
  112. cellStyle.Indention = ;
  113.  
  114. //上面基本都是设共公的设置
  115. //下面列出了常用的字段类型
  116. switch (str)
  117. {
  118. case stylexls.头:
  119. // cellStyle.FillPattern = FillPatternType.LEAST_DOTS;
  120. cellStyle.SetFont(font12);
  121. break;
  122. case stylexls.时间:
  123. IDataFormat datastyle = wb.CreateDataFormat();
  124.  
  125. cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
  126. cellStyle.SetFont(font);
  127. break;
  128. case stylexls.数字:
  129. cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
  130. cellStyle.SetFont(font);
  131. break;
  132. case stylexls.钱:
  133. IDataFormat format = wb.CreateDataFormat();
  134. cellStyle.DataFormat = format.GetFormat("¥#,##0");
  135. cellStyle.SetFont(font);
  136. break;
  137. case stylexls.url:
  138. fontcolorblue.Underline = FontUnderlineType.Single;
  139. cellStyle.SetFont(fontcolorblue);
  140. break;
  141. case stylexls.百分比:
  142. cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
  143. cellStyle.SetFont(font);
  144. break;
  145. case stylexls.中文大写:
  146. IDataFormat format1 = wb.CreateDataFormat();
  147. cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
  148. cellStyle.SetFont(font);
  149. break;
  150. case stylexls.科学计数法:
  151. cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
  152. cellStyle.SetFont(font);
  153. break;
  154. case stylexls.默认:
  155. cellStyle.SetFont(font);
  156. break;
  157. }
  158. return cellStyle;
  159.  
  160. }
  161. #endregion

4.读取Excel文件数据

  1. StringBuilder sbr = new StringBuilder();
  2. using (FileStream fs = File.OpenRead(LocalPathHelper.GetCurrentData() + "\\site.xls"))
  3. {
  4. HSSFWorkbook wk = new HSSFWorkbook(fs);//读取xls文件中的数据写入wk中
  5. for (int i = ; i < wk.NumberOfSheets; i++) //NumberOfSheets是总共的表数
  6. {
  7. ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
  8. for (int j = ; j <= sheet.LastRowNum; j++) //LastRowNum 最后一行的索引,从0开始
  9. {
  10. IRow row = sheet.GetRow(j);//获取当前行数据
  11. if (row != null)
  12. {
  13. sbr.Append("\r\n--------------------------------\r\n");
  14. for (int k = ; k <= row.LastCellNum; k++) //LastCellNum 最后一列的索引,从0开始
  15. {
  16. ICell cell = row.GetCell(k); //获取当前单元格
  17. if (cell != null)
  18. {
  19. sbr.Append(cell.ToString() + "\t");
  20. }
  21. }
  22. }
  23. }
  24. }
  25.  
  26. }
  27.  
  28. //将读取的Xml文件数据写入到txt中
  29. using (StreamWriter sw = new StreamWriter(new FileStream(LocalPathHelper.GetCurrentData() + "\\test1.txt", FileMode.Append)))
  30. {
  31. sw.Write(sbr.ToString());
  32. sw.Flush();
  33. Console.WriteLine("读取数据成功!");
  34. }

更多:

.Net Excel操作之NPOI(二)常用操作封装

C#中操作刚导出的Excel,设置其为自动调整列宽

C#操作word封装

.Net Excel操作之NPOI(一)简介的更多相关文章

  1. .Net Excel操作之NPOI(二)常用操作封装

    一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...

  2. c#开源Excel操作库--NPOI

    前言 以前也用C#操作过excel,用的是OleDb或者offic的com组件,但是总是非常的麻烦,依赖限制较多,所以果断寻找开源方案,JAVA上面已经有非常成熟的POI,就这样,找到了移.Net的移 ...

  3. Excel操作--使用NPOI导入导出Excel为DataTable

    1.ExcelHelper封装 namespace NPOI操作Excel { public class ExcelHelper { /// <summary> /// DataTable ...

  4. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  5. C#项目中操作Excel文件——使用NPOI库

    转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...

  6. 使用NPOI进行Excel操作

    一.NPOI组件导入 右键项目菜单,“管理NuGet程序包” 直接搜索“NPOI”即会出现列表,下载第一个进行安装即可 安装完成后项目引用会出现以下几项 二.基础使用 添加引用 using NPOI. ...

  7. MFC -- Excel操作简介(基于VS2010)

    一.添加与 Excel 操作相关的头文件 项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文 ...

  8. Excel阅读器NPOI

    什么是NPOI? NPOI 它是 POI 项目的 .NET 版本号. POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就能够在没有安装 Office ...

  9. 老牌开源Office操作组件NPOI现已支持.NET Core

    昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 ...

随机推荐

  1. Angular快速学习笔记(4) -- Observable与RxJS

    介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中的发布者和订阅者之间传递消息. 可观察对象可以发送多个任意类型的值 -- 字面量.消息.事件. 基 ...

  2. django model 条件过滤 queryset.filter(**condtions) 用法

    1.下述代码查询model对应数据库中日期等于2018-05-22的数据: queryset = model.objects.all() condtions: {'date': '2018-05-22 ...

  3. Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599

    //Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...

  4. Cookie安全漫谈(转)

    add by zhj: 我也同意作者的观点,JavaScript 操作 Cookie 是一种不正常的做法:可以用 JavaScript 操作 Cookie 完成的功能,一样可以在服务端来完成. js操 ...

  5. Java持久化之 -- 傲娇的NIO

    NIO: Jdk 1.4+ New IO 面向通道和缓冲区 所在包:java.nio 执行流程: 数据总数由通道写入到buffer , 或者是从buffer写入通道 完全替换IO(面向流  单向的) ...

  6. handlebars.min.js的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. codevs 水过 骑马修栅栏

    [问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  8. "Unchecked-Send"漏洞分析

    author:sf197tl;dr国内并没有一个文档有讲述该漏洞的,正好闲着没事.就写下这篇文章.在网上也搜寻了一些资料,通过自己的翻译才有今天的这篇文章.该漏洞在DASP TOP 10中可以查看到. ...

  9. C语言sscanf和sprintf输入输出使用及Strlen、Memset解释

    sscanf() - 从一个字符串中读进与指定格式相符的数据.   swscanf()- 用于处理宽字符字符串,和sscanf功能相同    通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不 ...

  10. 收集的一些MikroTik RouterOS 5.x破解版

    链接:https://pan.baidu.com/s/1RyREMfrpLkpQ-AIcDQES_Q  密码:byhd