winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间
- 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;
2.导入功能
- // <summary>
- /// Excel某sheet中内容导入到DataTable中
- /// 区分xsl和xslx分别处理
- /// </summary>
- /// <param name="filePath">Excel文件路径,含文件全名</param>
- /// <param name="sheetName">此Excel中sheet名</param>
- /// <returns></returns>
- public DataTable ExcelSheetImportToDataTable(string filePath, string sheetName)
- {
- DataTable dt = new DataTable();
- if (Path.GetExtension(filePath).ToLower() == ".xls".ToLower())
- {//.xls
- #region .xls文件处理:HSSFWorkbook
- try
- {
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- hssfworkbook = new HSSFWorkbook(file);
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- ISheet sheet = hssfworkbook.GetSheet(sheetName);
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
- //一行最后一个方格的编号 即总的列数
- for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
- {
- //SET EVERY COLUMN NAME
- HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
- dt.Columns.Add(cell.ToString());
- }
- while (rows.MoveNext())
- {
- IRow row = (HSSFRow)rows.Current;
- DataRow dr = dt.NewRow();
- if (row.RowNum == 0) continue;//The firt row is title,no need import
- for (int i = 0; i < row.LastCellNum; i++)
- {
- if (i>=dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
- {
- break;
- }
- ICell cell = row.GetCell(i);
- if ((i==0)&&(string.IsNullOrEmpty(cell.ToString())==true))//每行第一个cell为空,break
- {
- break;
- }
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- #endregion
- }
- else
- {//.xlsx
- #region .xlsx文件处理:XSSFWorkbook
- try
- {
- using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
- {
- hssfworkbook = new XSSFWorkbook(file);
- }
- }
- catch (Exception e)
- {
- throw e;
- }
- ISheet sheet = hssfworkbook.GetSheet(sheetName);
- System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
- XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
- //一行最后一个方格的编号 即总的列数
- for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
- {
- //SET EVERY COLUMN NAME
- XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
- dt.Columns.Add(cell.ToString());
- }
- while (rows.MoveNext())
- {
- IRow row = (XSSFRow)rows.Current;
- DataRow dr = dt.NewRow();
- if (row.RowNum == 0) continue;//The firt row is title,no need import
- for (int i = 0; i < row.LastCellNum; i++)
- {
- if (i >= dt.Columns.Count)//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213
- {
- break;
- }
- ICell cell = row.GetCell(i);
- if ((i == 0) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
- {
- break;
- }
- if (cell == null)
- {
- dr[i] = null;
- }
- else
- {
- dr[i] = cell.ToString();
- }
- }
- dt.Rows.Add(dr);
- }
- #endregion
- }
- return dt;
- }
3.导出功能
- /// <summary>
- /// NPOI导出Excel,不依赖本地是否装有Excel,导出速度快
- /// </summary>
- /// <param name="dataGridView1">要导出的dataGridView控件</param>
- /// <param name="sheetName">sheet表名</param>
- ///
- public static void ExportToExcel(DataGridView dataGridView1, string sheetName)
- {
- SaveFileDialog fileDialog = new SaveFileDialog();
- fileDialog.Filter = "Excel(97-2003)|*.xls";
- if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
- {
- return;
- }
- //不允许dataGridView显示添加行,负责导出时会报最后一行未实例化错误
- dataGridView1.AllowUserToAddRows = false;
- HSSFWorkbook workbook = new HSSFWorkbook();
- ISheet sheet = workbook.CreateSheet(sheetName);
- IRow rowHead = sheet.CreateRow(0);
- //填写表头
- for (int i = 0; i < dataGridView1.Columns.Count; i++)
- {
- rowHead.CreateCell(i, CellType.String).SetCellValue(dataGridView1.Columns[i].HeaderText.ToString());
- }
- //填写内容
- for (int i = 0; i < dataGridView1.Rows.Count; i++)
- {
- IRow row = sheet.CreateRow(i + 1);
- for (int j = 0; j < dataGridView1.Columns.Count; j++)
- {
- row.CreateCell(j, CellType.String).SetCellValue(dataGridView1.Rows[i].Cells[j].Value.ToString());
- }
- }
- using (FileStream stream = File.OpenWrite(fileDialog.FileName))
- {
- workbook.Write(stream);
- stream.Close();
- }
- MessageBox.Show("导出数据成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
- GC.Collect();
- }
在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中的更多相关文章
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- .Net core NPOI导入导出Excel
最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- <转>Npoi导入导出Excel操作<载>
//Datatable导出Excel private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName) { tr ...
- C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
- thinkphp导入导出excel表单数据
在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...
- NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。
App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
随机推荐
- 如何让 Xcode 在读写上提速100倍?
如何让 Xcode 在读写上提速100倍? 上个月参加了一场西雅图当地的线下 iOS 开发者聚会.Jeff Szuhay 作为一个有20+年开发经验的资深程序员,跟我讲了一套提高 iOS 开发效率的方 ...
- Delphi TWebBrowser编程简述(转帖)
Delphi 3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现的,而且需要自己引入,在其后的4.0和5.0中,它就在封装好shdocvw.dll之后作为Internet构 ...
- 【C/C++】C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇
C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言 ...
- 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 ...
- 1. pyhanlp介绍和简单应用
1. pyhanlp介绍和简单应用 2. 观点提取和聚类代码详解 1. 前言 中文分词≠自然语言处理! 中文分词只是第一步:HanLP从中文分词开始,覆盖词性标注.命名实体识别.句法分析.文本分类等常 ...
- ARKit从入门到精通(6)-ARSession介绍
转载:http://blog.csdn.net/u013263917/article/details/73157082 ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部 ...
- java基础篇---JSP内置对象详解
在JSP中为了简化用户的开发,提供了九个内置对象,这些内置对象将由容器为用户进行实例化,而用户直接使用即可,而不用像在java中那样,必须通过关键字new进行实例化对象之后才可以使用. No. 内 ...
- [转]MySQL-5.7 Update语句详解
原文地址:https://www.cnblogs.com/tongxiaoda/p/7908977.html .语法 (1)单表 UPDATE [LOW_PRIORITY] [IGNORE] tabl ...
- [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类 ...
- 【转】Ext.Window动态修改html
原文地址:http://www.codeweblog.com/ext-window%E5%8A%A8%E6%80%81%E4%BF%AE%E6%94%B9html/ Ext.Window动态修改htm ...