前言:

在之前的几篇博客中写过.NET Core使用NPOI导出Word和Excel的文章,今天把同样我们日常开发中比较常用的使用Excel导入数据到MySQL数据库中的文章给安排上。与此同时还把NPOI-ExportWordAndExcel-ImportExcelData这个开源项目升级到了.NET Core 3.1版本(注意之前一直是在.NET Core2.2的基础上开发的),升级的过程中遇到了不少坑,在项目中会有一些注释关于升级到.NET Core3.1需要修改的代码这里就不做详细的讲解了可以Clone项目,或者是直接查看官方文档.NET Core相关版本的迁移指南(https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio)。

项目实现效果图:

一、引入NPOI NuGet:

NPOI GitHub源码地址:

https://github.com/tonyqus/npoi

版本说明:

NPOI 2.4.1 (注意不同版本可能使用的姿势有点小差别,注意有同学可能会问现在NPOI的最新稳定版不是2.5.1吗?为什么还是用2.4.1呢?因为2.5.1还有些属性与之前的2.4.1不是很兼容,因此我们这里还是继续使用2.4.1,功能上能够完全能够满足我们的需求)。

程序包管理器控制台输入一下命令安装:

Install-Package NPOI -Version 2.4.1

通过NuGet管理解决方案安装:

选择=>工具=>NuGet包管理器=>程序包管理器控制台:

搜索:NPOI进行安装:

二、ASP.NET Core使用EF Core连接MySQL执行简单的CRUD操作:

因为该篇文章会涉及到MySQL数据库的操作,所以前提我们需要有一点的CRUD的基础。这里就不做详细的讲解了,可以参考之前写的一篇文章,ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作:

https://www.cnblogs.com/Can-daydayup/p/12593599.html

三、使用NPOI获取Excel数据注意点:

1、关于Excel的版本问题:

做过Excel相关工作的人应该都清楚Office Excel的格式有两种:

a、一种是.XLS是03版的Office Excel,无法打开高版本的。

a、一种是.XLSX是07版(或者07以上的)的Office Excel,可以打开低版本的。

所以我们在使用NPOI导入数据时不同格式获取Excel工作簿对象也有所不同,如下代码所示:

//Workbook对象代表一个工作簿,首先定义一个Excel工作薄

IWorkbook workbook;

//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式

#region 判断Excel版本

switch (fileType)

{

//.XLSX是07版(或者07以上的)的Office Excel

case ".xlsx":

workbook = new XSSFWorkbook(stream);

break;

//.XLS是03版的Office Excel

case ".xls":

workbook = new HSSFWorkbook(stream);

break;

default:

throw new Exception("Excel文档格式有误");

}

#endregion

2、NPOI获取Excel单元格中不同类型的数据:

注意,咱们填写在Excel单元格中的数据可能为多种不同的数据类型,因此我们需要对单元格中的数据类型做判断然后在获取,否则程序会报异常。

#region NPOI获取Excel单元格中不同类型的数据

//获取指定的单元格信息

var cell = row.GetCell(j);

switch (cell.CellType)

{

//首先在NPOI中数字和日期都属于Numeric类型

//通过NPOI中自带的DateUtil.IsCellDateFormatted判断是否为时间日期类型

case CellType.Numeric when DateUtil.IsCellDateFormatted(cell):

dataRow[j] = cell.DateCellValue;

break;

case CellType.Numeric:

//其他数字类型

dataRow[j] = cell.NumericCellValue;

break;

//空数据类型

case CellType.Blank:

dataRow[j] = "";

break;

//公式类型

case CellType.Formula:

{

HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook);

dataRow[j] = eva.Evaluate(cell).StringValue;

break;

}

//布尔类型

case CellType.Boolean:

dataRow[j] = row.GetCell(j).BooleanCellValue;

break;

//错误

case CellType.Error:

dataRow[j] = HSSFErrorConstants.GetText(row.GetCell(j).ErrorCellValue);

break;

//其他类型都按字符串类型来处理(未知类型CellType.Unknown,字符串类型CellType.String)

default:

dataRow[j] = cell.StringCellValue;

break;

}

#endregion

四、通用的NPOI Excel导入数据帮助类(NpoiExcelImportHelper):

/**

* Author:追逐时光者

* Description:Npoi数据导入帮助类

* Description:2020年9月8日*/

usingSystem;usingSystem.Data;usingSystem.IO;usingNPOI.HSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.XSSF.UserModel;namespaceYY_Utility

{public classNpoiExcelImportHelper

{private staticNpoiExcelImportHelper _excelImportHelper;public staticNpoiExcelImportHelper _

{get => _excelImportHelper ?? (_excelImportHelper = newNpoiExcelImportHelper());set => _excelImportHelper =value;

}///

///读取excel表格中的数据,将Excel文件流转化为dataTable数据源///默认第一行为标题///

/// excel文档文件流

/// 文档格式

/// 是否转化成功

/// 转换结果消息

///

public DataTable ExcelToDataTable(Stream stream, string fileType, out bool isSuccess, out stringresultMsg)

{

isSuccess= false;

resultMsg= "Excel文件流成功转化为DataTable数据源";var excelToDataTable = newDataTable();try{//Workbook对象代表一个工作簿,首先定义一个Excel工作薄

IWorkbook workbook;//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式

#region 判断Excel版本

switch(fileType)

{//.XLSX是07版(或者07以上的)的Office Excel

case ".xlsx":

workbook= newXSSFWorkbook(stream);break;//.XLS是03版的Office Excel

case ".xls":

workbook= newHSSFWorkbook(stream);break;default:throw new Exception("Excel文档格式有误");

}#endregion

var sheet = workbook.GetSheetAt(0);var rows =sheet.GetRowEnumerator();var headerRow = sheet.GetRow(0);int cellCount = headerRow.LastCellNum;//最后一行列数(即为总列数)//获取第一行标题列数据源,转换为dataTable数据源的表格标题名称

for (var j = 0; j < cellCount; j++)

{var cell =headerRow.GetCell(j);

excelToDataTable.Columns.Add(cell.ToString());

}//获取Excel表格中除标题以为的所有数据源,转化为dataTable中的表格数据源

for (var i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)

{var dataRow =excelToDataTable.NewRow();var row =sheet.GetRow(i);if (row == null) continue; //没有数据的行默认是null

for (int j = row.FirstCellNum; j < cellCount; j++)

{if (row.GetCell(j) != null)//单元格内容非空验证

{#region NPOI获取Excel单元格中不同类型的数据

//获取指定的单元格信息

var cell =row.GetCell(j);switch(cell.CellType)

{//首先在NPOI中数字和日期都属于Numeric类型//通过NPOI中自带的DateUtil.IsCellDateFormatted判断是否为时间日期类型

caseCellType.Numeric when DateUtil.IsCellDateFormatted(cell):

dataRow[j]=cell.DateCellValue;break;caseCellType.Numeric://其他数字类型

dataRow[j] =cell.NumericCellValue;break;//空数据类型

caseCellType.Blank:

dataRow[j]= "";break;//公式类型

caseCellType.Formula:

{

HSSFFormulaEvaluator eva= newHSSFFormulaEvaluator(workbook);

dataRow[j]=eva.Evaluate(cell).StringValue;break;

}//布尔类型

caseCellType.Boolean:

dataRow[j]=row.GetCell(j).BooleanCellValue;break;//错误

caseCellType.Error:

dataRow[j]=HSSFErrorConstants.GetText(row.GetCell(j).ErrorCellValue);break;//其他类型都按字符串类型来处理(未知类型CellType.Unknown,字符串类型CellType.String)

default:

dataRow[j]=cell.StringCellValue;break;

}#endregion}

}

excelToDataTable.Rows.Add(dataRow);

}

isSuccess= true;

}catch(Exception e)

{

resultMsg=e.Message;

}returnexcelToDataTable;

}

}

}

总结:

关于.NET Core 使用NPOI导入数据和导出Word,Excel数据的教程到这里就告一段落了,假如大家感兴趣的话或者对大家有帮助的话不要忘记了前往NPOI-ExportWordAndExcel-ImportExcelData项目中给我一个star哦,谢谢。

相关实例链接地址:

GitHub完整实例地址:

https://github.com/YSGStudyHards/NPOI-ExportWordAndExcel-ImportExcelData

.NET Core使用NPOI导出复杂,美观的Excel详解:

https://www.cnblogs.com/Can-daydayup/p/12501400.html

.NET Core使用NPOI导出复杂Word详解:

https://www.cnblogs.com/Can-daydayup/p/11588531.html

.NET Core使用NPOI将Excel中的数据批量导入到MySQL:

https://www.cnblogs.com/Can-daydayup/p/12593165.html

ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作:

https://www.cnblogs.com/Can-daydayup/p/12593599.html

.net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...相关推荐

  1. word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...

    用javascript怎么实现把excel中的数据批量导入到数据库表中 这个js不能直接实现吧 我们程序用到 先读取excel内容转换成数组 然后放到页面上 再提交表单 储存 MySql如何批量添加数 ...

  2. matlab如何在word中插入多个表格,怎么把excel中的数据批量导入到word中的表格中《不同表格间的数据导入》...

    如何将excel表格中大量数据导入matlab中并作图 工具:MATLAB.office excel 将待导入的矩阵结构据录入Excel中,录入时注意行列原矩阵一一对应. 录入完以后保存数据,为了后续 ...

  3. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...

    c#如何将dataset中的数据批量导入oracle数据库以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#如何将da ...

  4. PHP将excel文件中的数据批量导入到数据库中

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插 ...

  5. php excel批量导入,PHP将excel文件中的数据批量导入到数据库中

    这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插入到数据表中.当然,前提是用户给我们的excel表格中的信息必须和我们表中 ...

  6. 【Python自动化办公】实现excel表中的数据批量导入到word指定位置(表格形式和下滑线形式)

    文章目录 案例1--word模板为表格 案例2--word模板中带有下划线形式 python docx基本操作 回到需求 案例1--word模板为表格 目的就是把excel中的数据,填入word模板中 ...

  7. dataset中的数据批量导入oracle数据库,C#如何把某个文件夹下的所有Excel文件导入Oracle数据库。详细点!...

    满意答案 o8wlfkcnr 推荐于 2016.01.01 采纳率:45%    等级:7 已帮助:311人 用下面这个方法把excel导入dataview,再把它导入database就简单了 pub ...

  8. .net core 实现简单爬虫—抓取博客园的博文列表

    一.介绍一个Http请求框架HttpCode.Core HttpCode.Core 源自于HttpCode(传送门),不同的是 HttpCode.Core是基于.net standard 2.0实现的 ...

  9. oracle导入excel字段超过4000字符数据_产品思考:B端产品中,为什么批量导入功能很重要?...

    B端产品的重要价值是提高企业的办公效率,在企业的日常工作中批量录入数据的场景很多,所以批量导入是b端设计中很重要的一个功能.本文作者结合案例,分享了自己关于B端产品批量导入功能的思考. 在做b端产品的 ...

最新文章

  1. 02-Wifi通讯架构介绍
  2. 数学奥赛用不用计算机,报考自招必看!五大学科竞赛利弊详解,到底哪科最适合你?...
  3. sql sever 中如何查看某个表的索引_查看执行计划:explain的type
  4. vhdl变量赋初值_5.5 C++自动变量
  5. SpringBoot与jackson.databind兼容报错问题
  6. 基于深度学习的视频预测研究综述
  7. squid服务配置(正向、反向代理)
  8. 基于java SSM springboot景区行李寄存管理系统设计和实现
  9. 用tsmmc.MSC方式在xp和Win7集中管理多台Win2003服务器
  10. 第二篇 ( wcf 与 android 图片上传下载)
  11. java 程序简介
  12. 路由器Lan、Wan短接问题
  13. [转载] python模板字符串和格式化字符串
  14. 2021-08-03 SELECT简单查询
  15. OTT TV 与 IPTV 的区别
  16. 基于单片机语音控制灯系统设计
  17. sklearn 随机森林代码示例
  18. Unity富文本详解
  19. SwiftUI调用UIKit
  20. android模拟器不玩游戏,安卓模拟器哪个玩游戏最流畅?

热门文章

  1. python编写函数showmsg(n、name)_Python语言答案
  2. python数据参数_零基础学习python数据分析——函数的参数
  3. itextpdf添加表格元素_itext生成pdf文件-表格
  4. 鸿蒙HI3516-驱动开发(1.1-LTS)
  5. python使用hash256加密验证字符串
  6. java酒店信息管理系统_java实现酒店管理系统
  7. gentry同态加密算法_基于Gentry全同态加密算法公钥个数优化的研究
  8. 软件测试计划和测试报告
  9. 腾讯这套SpringMvc面试题你了解多少?(面试必备)
  10. Android Studio自动排版的两种方法