1.通过NUGET管理器下载nopi,在引入命令空间

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using NPOI.SS.UserModel; //NPOI
  6. using NPOI.HSSF.Util; //NPOI
  7. using NPOI.HSSF.UserModel; //NPOI
  8. using NPOI.XSSF.UserModel; //NPOI
  9. using System.Data.SqlClient;
  10. using System.Data;

2.导入功能

  1. // <summary>
  2. /// Excel某sheet中内容导入到DataTable中
  3. /// 区分xsl和xslx分别处理
  4. /// </summary>
  5. /// <param name="filePath">Excel文件路径,含文件全名</param>
  6. /// <param name="sheetName">此Excel中sheet名</param>
  7. /// <returns></returns>
  8. public DataTable ExcelSheetImportToDataTable(string filePath, string sheetName)
  9. {
  10.  
  11. DataTable dt = new DataTable();
  12.  
  13. if (Path.GetExtension(filePath).ToLower() == ".xls".ToLower())
  14. {//.xls
  15. #region .xls文件处理:HSSFWorkbook
  16. try
  17. {
  18. using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  19. {
  20.  
  21. hssfworkbook = new HSSFWorkbook(file);
  22. }
  23. }
  24. catch (Exception e)
  25. {
  26. throw e;
  27. }
  28.  
  29. ISheet sheet = hssfworkbook.GetSheet(sheetName);
  30. System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  31. HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
  32.  
  33. //一行最后一个方格的编号 即总的列数
  34. for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
  35. {
  36. //SET EVERY COLUMN NAME
  37. HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
  38.  
  39. dt.Columns.Add(cell.ToString());
  40. }
  41.  
  42. while (rows.MoveNext())
  43. {
  44. IRow row = (HSSFRow)rows.Current;
  45. DataRow dr = dt.NewRow();
  46.  
  47. if (row.RowNum == 0) continue;//The firt row is title,no need import
  48.  
  49. for (int i = 0; i < row.LastCellNum; i++)
  50. {
  51. if (i>=dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
  52. {
  53. break;
  54. }
  55.  
  56. ICell cell = row.GetCell(i);
  57.  
  58. if ((i==0)&&(string.IsNullOrEmpty(cell.ToString())==true))//每行第一个cell为空,break
  59. {
  60. break;
  61. }
  62.  
  63. if (cell == null)
  64. {
  65. dr[i] = null;
  66. }
  67. else
  68. {
  69. dr[i] = cell.ToString();
  70. }
  71. }
  72.  
  73. dt.Rows.Add(dr);
  74. }
  75. #endregion
  76. }
  77. else
  78. {//.xlsx
  79. #region .xlsx文件处理:XSSFWorkbook
  80. try
  81. {
  82. using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  83. {
  84.  
  85. hssfworkbook = new XSSFWorkbook(file);
  86. }
  87. }
  88. catch (Exception e)
  89. {
  90. throw e;
  91. }
  92.  
  93. ISheet sheet = hssfworkbook.GetSheet(sheetName);
  94. System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
  95. XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
  96.  
  97. //一行最后一个方格的编号 即总的列数
  98. for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
  99. {
  100. //SET EVERY COLUMN NAME
  101. XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
  102.  
  103. dt.Columns.Add(cell.ToString());
  104.  
  105. }
  106.  
  107. while (rows.MoveNext())
  108. {
  109. IRow row = (XSSFRow)rows.Current;
  110. DataRow dr = dt.NewRow();
  111.  
  112. if (row.RowNum == 0) continue;//The firt row is title,no need import
  113.  
  114. for (int i = 0; i < row.LastCellNum; i++)
  115. {
  116. if (i >= dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
  117. {
  118. break;
  119. }
  120.  
  121. ICell cell = row.GetCell(i);
  122.  
  123. if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
  124. {
  125. break;
  126. }
  127.  
  128. if (cell == null)
  129. {
  130. dr[i] = null;
  131. }
  132. else
  133. {
  134. dr[i] = cell.ToString();
  135. }
  136. }
  137. dt.Rows.Add(dr);
  138. }
  139. #endregion
  140. }
  141. return dt;
  142. }

 3.导出功能

  1. /// <summary>
  2. /// NPOI导出Excel,不依赖本地是否装有Excel,导出速度快
  3. /// </summary>
  4. /// <param name="dataGridView1">要导出的dataGridView控件</param>
  5. /// <param name="sheetName">sheet表名</param>
  6. ///
  7. public static void ExportToExcel(DataGridView dataGridView1, string sheetName)
  8. {
  9. SaveFileDialog fileDialog = new SaveFileDialog();
  10. fileDialog.Filter = "Excel(97-2003)|*.xls";
  11. if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
  12. {
  13. return;
  14. }
  15. //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
  16. dataGridView1.AllowUserToAddRows = false;
  17. HSSFWorkbook workbook = new HSSFWorkbook();
  18. ISheet sheet = workbook.CreateSheet(sheetName);
  19. IRow rowHead = sheet.CreateRow(0);
  20.  
  21. //填写表头
  22. for (int i = 0; i < dataGridView1.Columns.Count; i++)
  23. {
  24. rowHead.CreateCell(i, CellType.String).SetCellValue(dataGridView1.Columns[i].HeaderText.ToString());
  25. }
  26. //填写内容
  27. for (int i = 0; i < dataGridView1.Rows.Count; i++)
  28. {
  29. IRow row = sheet.CreateRow(i + 1);
  30. for (int j = 0; j < dataGridView1.Columns.Count; j++)
  31. {
  32. row.CreateCell(j, CellType.String).SetCellValue(dataGridView1.Rows[i].Cells[j].Value.ToString());
  33. }
  34. }
  35.  
  36. using (FileStream stream = File.OpenWrite(fileDialog.FileName))
  37. {
  38. workbook.Write(stream);
  39. stream.Close();
  40. }
  41. MessageBox.Show("导出数据成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  42. GC.Collect();
  43. }

  

在winform中使用很方面的,特别是些服务程序的

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using NPOI.SS.UserModel;        //NPOI
using NPOI.HSSF.Util;           //NPOI
using NPOI.HSSF.UserModel;      //NPOI
using NPOI.XSSF.UserModel;      //NPOI
using System.Data.SqlClient;
using System.Data;

winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中的更多相关文章

  1. 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中

    using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...

  2. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  3. .Net core NPOI导入导出Excel

    最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...

  4. NPOI导入导出Excel

    .net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交  代码:  第一步. 在页面里面加入2个隐藏的iframe, 如下 ...

  5. <转>Npoi导入导出Excel操作<载>

    //Datatable导出Excel private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName) { tr ...

  6. C#导入导出Excel表的数据

    一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...

  7. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  8. NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  9. Npoi导入导出Excel操作

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

随机推荐

  1. 如何让 Xcode 在读写上提速100倍?

    如何让 Xcode 在读写上提速100倍? 上个月参加了一场西雅图当地的线下 iOS 开发者聚会.Jeff Szuhay 作为一个有20+年开发经验的资深程序员,跟我讲了一套提高 iOS 开发效率的方 ...

  2. Delphi TWebBrowser编程简述(转帖)

    Delphi 3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现的,而且需要自己引入,在其后的4.0和5.0中,它就在封装好shdocvw.dll之后作为Internet构 ...

  3. 【C/C++】C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇

    C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言 ...

  4. scala工程导入报错:scalatest_2.10-1.9.1.jar is cross-compiled with an incompatible version of Scala (2.10).

    错误原因: The Scala IDE tries to check if binary incompatible Scala libraries have been inadvertently mi ...

  5. 1. pyhanlp介绍和简单应用

    1. pyhanlp介绍和简单应用 2. 观点提取和聚类代码详解 1. 前言 中文分词≠自然语言处理! 中文分词只是第一步:HanLP从中文分词开始,覆盖词性标注.命名实体识别.句法分析.文本分类等常 ...

  6. ARKit从入门到精通(6)-ARSession介绍

    转载:http://blog.csdn.net/u013263917/article/details/73157082 ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部 ...

  7. java基础篇---JSP内置对象详解

    在JSP中为了简化用户的开发,提供了九个内置对象,这些内置对象将由容器为用户进行实例化,而用户直接使用即可,而不用像在java中那样,必须通过关键字new进行实例化对象之后才可以使用.   No. 内 ...

  8. [转]MySQL-5.7 Update语句详解

    原文地址:https://www.cnblogs.com/tongxiaoda/p/7908977.html .语法 (1)单表 UPDATE [LOW_PRIORITY] [IGNORE] tabl ...

  9. [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

    关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类 ...

  10. 【转】Ext.Window动态修改html

    原文地址:http://www.codeweblog.com/ext-window%E5%8A%A8%E6%80%81%E4%BF%AE%E6%94%B9html/ Ext.Window动态修改htm ...