一、下载引用

下载需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2007版需要此dll)。

二、excel转datatable类

  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using NPOI.SS.UserModel;
  5. using NPOI.XSSF.UserModel;
  6. using NPOI.HSSF.UserModel;
  7. namespace NPOIOprateExcel
  8. {
  9. public class ExcelUtility
  10. {
  11. /// <summary>
  12. /// 将excel导入到datatable
  13. /// </summary>
  14. /// <param name="filePath">excel路径</param>
  15. /// <param name="isColumnName">第一行是否是列名</param>
  16. /// <returns>返回datatable</returns>
  17. public static DataTable ExcelToDataTable(string filePath, bool isColumnName)
  18. {
  19. DataTable dataTable = null;
  20. FileStream fs = null;
  21. DataColumn column = null;
  22. DataRow dataRow = null;
  23. IWorkbook workbook = null;
  24. ISheet sheet = null;
  25. IRow row = null;
  26. ICell cell = null;
  27. int startRow = 0;
  28. try
  29. {
  30. using (fs = File.OpenRead(filePath))
  31. {
  32. // 2007版本
  33. if (filePath.IndexOf(".xlsx") > 0)
  34. workbook = new XSSFWorkbook(fs);
  35. // 2003版本
  36. else if (filePath.IndexOf(".xls") > 0)
  37. workbook = new HSSFWorkbook(fs);
  38. if (workbook != null)
  39. {
  40. sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
  41. dataTable = new DataTable();
  42. if (sheet != null)
  43. {
  44. int rowCount = sheet.LastRowNum;//总行数
  45. if (rowCount > 0)
  46. {
  47. IRow firstRow = sheet.GetRow(0);//第一行
  48. int cellCount = firstRow.LastCellNum;//列数
  49. //构建datatable的列
  50. if (isColumnName)
  51. {
  52. startRow = 1;//如果第一行是列名,则从第二行开始读取
  53. for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
  54. {
  55. cell = firstRow.GetCell(i);
  56. if (cell != null)
  57. {
  58. if (cell.StringCellValue != null)
  59. {
  60. column = new DataColumn(cell.StringCellValue);
  61. dataTable.Columns.Add(column);
  62. }
  63. }
  64. }
  65. }
  66. else
  67. {
  68. for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
  69. {
  70. column = new DataColumn("column" + (i + 1));
  71. dataTable.Columns.Add(column);
  72. }
  73. }
  74. //填充行
  75. for (int i = startRow; i <= rowCount; ++i)
  76. {
  77. row = sheet.GetRow(i);
  78. if (row == null) continue;
  79. dataRow = dataTable.NewRow();
  80. for (int j = row.FirstCellNum; j < cellCount; ++j)
  81. {
  82. cell = row.GetCell(j);
  83. if (cell == null)
  84. {
  85. dataRow[j] = "";
  86. }
  87. else
  88. {
  89. //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
  90. switch (cell.CellType)
  91. {
  92. case CellType.Blank:
  93. dataRow[j] = "";
  94. break;
  95. case CellType.Numeric:
  96. short format = cell.CellStyle.DataFormat;
  97. //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
  98. if (format == 14 || format == 31 || format == 57 || format == 58)
  99. dataRow[j] = cell.DateCellValue;
  100. else
  101. dataRow[j] = cell.NumericCellValue;
  102. break;
  103. case CellType.String:
  104. dataRow[j] = cell.StringCellValue;
  105. break;
  106. }
  107. }
  108. }
  109. dataTable.Rows.Add(dataRow);
  110. }
  111. }
  112. }
  113. }
  114. }
  115. return dataTable;
  116. }
  117. catch (Exception)
  118. {
  119. if (fs != null)
  120. {
  121. fs.Close();
  122. }
  123. return null;
  124. }
  125. }
  126. }
  127. }

三、结果

四、写入excel类

  1. public static bool DataTableToExcel(DataTable dt)
  2. {
  3. bool result = false;
  4. IWorkbook workbook = null;
  5. FileStream fs = null;
  6. IRow row = null;
  7. ISheet sheet = null;
  8. ICell cell = null;
  9. try
  10. {
  11. if (dt != null && dt.Rows.Count > 0)
  12. {
  13. workbook = new HSSFWorkbook();
  14. sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表
  15. int rowCount = dt.Rows.Count;//行数
  16. int columnCount = dt.Columns.Count;//列数
  17. //设置列头
  18. row = sheet.CreateRow(0);//excel第一行设为列头
  19. for (int c = 0; c < columnCount; c++)
  20. {
  21. cell = row.CreateCell(c);
  22. cell.SetCellValue(dt.Columns[c].ColumnName);
  23. }
  24. //设置每行每列的单元格,
  25. for (int i = 0; i <rowCount; i++)
  26. {
  27. row = sheet.CreateRow(i+1);
  28. for (int j = 0; j < columnCount; j++)
  29. {
  30. cell = row.CreateCell(j);//excel第二行开始写入数据
  31. cell.SetCellValue(dt.Rows[i][j].ToString());
  32. }
  33. }
  34. using (fs = File.OpenWrite(@"D:/myxls.xls"))
  35. {
  36. workbook.Write(fs);//向打开的这个xls文件中写入数据
  37. result = true;
  38. }
  39. }
  40. return result;
  41. }
  42. catch (Exception ex)
  43. {
  44. if (fs != null)
  45. {
  46. fs.Close();
  47. }
  48. return false;
  49. }
  50. }

结果如下:

源码地址:http://download.csdn.net/detail/coderk2014/9328779

C#中NPOI操作excel之读取和写入excel数据的更多相关文章

  1. C#中创建、打开、读取、写入、保存Excel的一般性代码

    ---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228 1. Excel对象微软的Excel对象模型包括了128个不同的对象,从 ...

  2. Java使用POI读取和写入Excel指南

    Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...

  3. Java使用POI读取和写入Excel指南(转)

    做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0 ...

  4. C#中npoi操作Excel[版本2.0.1读写2003、2007格式]

    下载npoi2.0.1dll文件:http://download.csdn.net/detail/pukuimin1226/5851747 public static void test1()     ...

  5. 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式

    Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...

  6. 读取、写入excel数据

    在实际项目中,不可避免的会操作excel表格.一直以来都是读取excel表格,可今天为了写入excel表格,可是煞费苦心,终于完成,记录下来以便后续使用. 1.读取excel表格的数据 读取excel ...

  7. Java 使用Apache POI读取和写入Excel表格

    1,引入所用的包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxm ...

  8. Python3 读取和写入excel

    https://blog.csdn.net/weixin_43094965/article/details/82226263一.Excel 1.Excel文件三个对象 workbook: 工作簿,一个 ...

  9. MATLAB读取和写入Excel文件

    1. 读取Excel文件 (a) 命令方式xlsread:  读取命令:[data,text]  = xlsread(FileName, SheetName, Range); data保存的是数据单元 ...

随机推荐

  1. [Vue warn]: Error in render: "SyntaxError: Unexpected token ' in JSON at position 1"

    一,场景: 字符串转对象: var str = "{'bankRate':5,'YINGUO':0}" 二,操作: JSON.parse(str)时候,报错 [Vue warn]: ...

  2. sencha touch list css(样式) 详解

    /* *自定义列表页面 */ Ext.define('app.view.util.MyList', { alternateClassName: 'myList', extend: 'Ext.List' ...

  3. Telnet是什么意思又是什么协议 Telnet有什么作用及功能

    Telnet是teletype network的缩写,专业的说,Telnet是Internet上远程登录的一种程序:它可以让您的电脑通过网络登录到网络另一端的电脑上,甚至还可以存取那台电脑上的文件. ...

  4. Linux 修改文件和文件夹权限

    查看当前目录和文件权限 ls -l 文件属性 连接数 文件拥有者 所属群组 文件大小 文件修改时间 文件名drwxr-xr-x 4 william wheel 136 Apr 10 23:34 ven ...

  5. Egret IDE中搜索,过滤文件,只搜索.ts

    刚开始忘了这个搜索条件在哪里打开了,后来找着了,记录一下 = =!

  6. Android 简单计算器实现源码

    1.string.xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...

  7. Unity3D笔记 英保通六 角色控制器

    一.角色控制器 U3D有两种角色控制方式:Rigidbody刚体.角色控制器组件(胶囊体组件) 面试的题目中经常会遇到这个问题: CharacterController和Rigidbody的区别? 这 ...

  8. CSS 盒子模型 二

    Sublime 快捷键: 文件保存后,输入 html:xt + tab  ,补全html html:xt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  9. layerui如何隐藏按钮?

    https://www.layui.com/doc/modules/layer.html#btn 建议把 btn: ['取消'],btnAlign: 'c',yes: function (index) ...

  10. 使用IntelliJ IDEA进行Python远程调试的需求(未完)

    使用IntelliJ IDEA进行Python远程调试的需求(未完) 在研究深度学习Machlearning时,有时候需要借助ubuntu搭建的tensorflow环境,另外也有越来越多的运算程序只能 ...