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

http://www.cnblogs.com/songrun/p/3547738.html

NPOI 2.0教程 – 自动识别Excel 2003或2007格式

http://tonyqus.sinaapp.com/archives/482

NPOI 2.0 教程

http://tonyqus.sinaapp.com/npoi2tutorial

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.POIFS.FileSystem;
using NPOI.OpenXml4Net.OPC; namespace weirManagement.BaseClass
{
public class NPOIHelper : BaseClass
{
//public class WorkbookFactory
//{
// public static IWorkbook Create(POIFSFileSystem fs){...}
// public static IWorkbook Create(OPCPackage pkg){...}
// public static IWorkbook Create(Stream inputStream){...}
// public static IFormulaEvaluator CreateFormulaEvaluator(IWorkbook workbook){...}
//} /// <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)
public DataTable ExcelImportToDataTable(string filePath)
{
DataTable dt = new DataTable();
//.xlsx //.xlsm
#region .xlsx文件处理:XSSFWorkbook
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
IWorkbook wb = WorkbookFactory.Create(file);
ISheet sheet = wb.GetSheetAt();//.GetSheet(sheetName);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
IRow headerRow = sheet.GetRow();
//一行最后一个方格的编号 即总的列数
for (int j = ; j < sheet.GetRow().LastCellNum; j++)
{
//SET EVERY COLUMN NAME
ICell cell = headerRow.GetCell(j);
if (cell != null && cell.ToString() != "")
{
dt.Columns.Add(cell.ToString());
}
else { continue; } }
int colCount = dt.Columns.Count; while (rows.MoveNext())
{
//IRow row = (XSSFRow)sheet.GetRow(j);
IRow row = (IRow)rows.Current;
DataRow dr = dt.NewRow();
bool addDR = false;
if (row.RowNum == ) continue;//The firt row is title,no need import
for (int i = ; i < colCount; i++)
{
//cell count>column count,then break //每条记录的单元格数量不能大于表格栏位数量 20140213                 
//cell count>column count,then break //每条记录的单元格数量不能大于DataTable的title
if (i >= colCount){ break; } ICell cell = row.GetCell(i); if ((i == ) && (string.IsNullOrEmpty(cell.ToString()) == true))//每行第一个cell为空,break
{
break;
}
if (cell != null)
{
object o = cell;
//读取Excel格式,根据格式读取数据类型
switch (cell.CellType)
{
case CellType.Blank: //空数据类型处理
o = "";
break;
case CellType.String: //字符串类型
o = cell.StringCellValue;
break;
case CellType.Numeric: //数字类型
if (DateUtil.IsCellDateFormatted(cell))
{ o = cell.DateCellValue; }
else
{
o = cell.ToString();
}
break;
case CellType.Formula:
//HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(hssfworkbook);
IFormulaEvaluator e = WorkbookFactory.CreateFormulaEvaluator(wb);
o = e.Evaluate(cell).StringValue;
break;
default:
o = "";
break;
}
dr[i] = Convert.ToString(o);//row.GetCell(j).StringCellValue;
addDR = true;
}
}
if (addDR)
{
dt.Rows.Add(dr);
}
}
}
}
catch (Exception e)
{
throw e;
}
#endregion
return dt;
}
  }
}

NPOI导入excel为datatable (xls xlsx xlsm)的更多相关文章

  1. ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库

    使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...

  2. 使用npoi导入Excel - 带合并单元格--附代码

    之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...

  3. 使用NPOI导入Excel注意日期格式和数字格式

    //使用NPOI导入Excel public static DataTable importExcelToDataSetUsingNPOI(string FilePath, string fileNa ...

  4. NPOI 导入Excel和读取Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  5. 用NPOI从Excel到DataTable

    NPOI功能强大,不用装Excel,就可以操作表格中数据----Excel.Sheet------>DataTable private IWorkbook workbook = null; pr ...

  6. .Net Core 使用 NPOI 导入Excel

    由于之前在网上查阅一些资料发现总是不能编译通过,不能正常使用,现把能正常使用的代码贴出: /// <summary> /// Excel导入帮助类 /// </summary> ...

  7. NPOI导入excel

    1.引用NPOI: using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI.SS.UserModel; 2.导出excel 1 privat ...

  8. NPOI写Excel,Spire.XLS for.NET组件转换Excel为PDF

    首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll  最好使用使用NuGet下载 , ...

  9. POI异步导入Excel兼容xsl和xlsx

    项目架构:spring+struts2+hibernate4+oracle 需求:用户导入excel文件,导入到相应的数据表中,要求提供导入模板,支持xls和xlsx文件 思路分析: 1.提供一个下载 ...

随机推荐

  1. c++中set 的用法

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  2. http协议请求流程分析

    http协议请求流程分析 用户输入URL(地址链接)(http://www.baidu.com:80/tools.html)客户端获取到端口及主机名后,客户端利用DNS解析域名,首先客户端的浏览器会先 ...

  3. Spring Developer Tools 源码分析:三、重启自动配置'

    接上文 Spring Developer Tools 源码分析:二.类路径监控,接下来看看前面提到的这些类是如何配置,如何启动的. spring-boot-devtools 使用了 Spring Bo ...

  4. Mark一篇介绍Java垃圾回收和JVM参数设置的文章

    贴出原文连接:重磅!Java 内存管理白皮书,读完它,java 内存管理的问题完全 NO Problem! 读了一遍,对并行的垃圾回收还不是很理解,先mark,消化消化再学习. 文章说的一些JVM设置 ...

  5. GCD-Euclidean Algorithm

    求解两个正整数的最大公约数(Greatest Common Devisor),可以采用循环进行遍历,不过效率很低.所以引入欧几里得算法(Euclid's algorithm). 欧几里得算法基于GCD ...

  6. 通过例题进一步学习DP

    1.以上篇文章数塔为例 https://blog.csdn.net/weixin_43627118/article/details/88701586 上一章用的是递归的做法,这次我们采用递推的做法. ...

  7. 2020年ubuntu1804安装nginx最新稳定版1.16详细教程笔记

    第一次使用nginx是2007年,当时主流还是apache.nginx横空出世,在web2.0的推动下,迅速崛起.眼下已是绝对的主流了. 当时,还有一个轻量级的lighttpd,是德国人写,刚开始还并 ...

  8. memcached线程模型

    直接上图: memcached使用多线程模型,一个master线程,多个worker线程,master和worker通过管道实现通信. 每个worker线程有一个队列,队列元素为CQ_ITEM. ty ...

  9. 2-MyBatisPlus教程(HelloWorld)

    1,准备数据 DROP TABLE IF EXISTS user; CREATE TABLE user ( id ) NOT NULL COMMENT '主键ID', name ) NULL DEFA ...

  10. Java——Spring超详细总结

    Spring概述 一.简化Java开发 Spring为了降低Java开发的复杂性,采用了以下四种策略 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明 ...