ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据
简介
作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码。最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代码就能读取excel数据。就像作者说的:让操作excel变成了操作对象。下面让我们来看看这个组件
项目地址:
https://gitee.com/fengwuyan/ExcelToObject
项目示例
- 在项目中引入
ExcelToObject.NPOI
dotnet add package ExcelToObject.Npoi --version 1.0.0
- 在Program或Startup类中添加服务
service.AddExcelToObjectNpoiService();
以下以一个业务来举例,一个导入业务需要同时导入两个数据源,我们先把Excel模板定义好。
第一个Sheet页:导入基本信息
第二个Sheet页:导入字典配置信息列表
以下为导入两个数据sheet的代码
- 构造函数注入
IExcelFactory
对象 - 使用
ReadByNameManager
和ReadListByNameManager
方法分别读取单个对象和读取list列表
- 构造函数注入
private readonly IExcelFactory _excelFactory;
public FileAppService(IExcelFactory excelFactory)
{
_excelFactory = excelFactory;
}
public Task ImportAsync(Stream fileStream)
{
using var excelService = _excelFactory.Create(fileStream);
var userImportInput = excelService.ReadByNameManager<UserImportExportDto>("基本信息");
var settingImportInputList = excelService.ReadListByNameManager<SettingImportExportDto>("字典配置");
Console.WriteLine($"姓名:{userImportInput.Name}、年龄:{userImportInput.Age}");
settingImportInputList.ForEach(e => Console.WriteLine($"类别名称:{e.CategoryName}、字典项名称:{e.ItemName}、字典项值:{e.Value}"));
//写入到数据库
}
详细操作
- 分别定义对应数据Sheet页的DTO
- 人员信息dto
/// <summary>
/// 用户导入导出dto
/// </summary>
public class UserImportExportDto
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Gender { get; set; }
/// <summary>
/// 身份证号
/// </summary>
public string IDCard { get; set; }
/// <summary>
/// 毕业院校
/// </summary>
public string School { get; set; }
/// <summary>
/// 简介
/// </summary>
public string Profile { get; set; }
}
- 字典配置信息dto
/// <summary>
/// 字典配置
/// </summary>
public class SettingImportExportDto
{
/// <summary>
/// 字典类别编码
/// </summary>
public string CategoryCode { get; set; }
/// <summary>
/// 字典类别名称
/// </summary>
public string CategoryName { get; set; }
/// <summary>
/// 字典项编码
/// </summary>
public string ItemCode { get; set; }
/// <summary>
/// 字典项名称
/// </summary>
public string ItemName { get; set; }
/// <summary>
/// 字典值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
设置Excel模板内每个Sheet的名称管理器,名称管理器的值与DTO的属性名称一致
- 人员信息
最终每个对应的数据区都配置好了名称管理器之后的效果:
- 字典配置信息
配置好之后,就可以了。总结就两步:
- 定义导入导出dto
- 配置excel模板的名称管理器
写入操作
写入操作也是一样的流程
- 建立对应DTO
- 配置excel模板
- 调用
WriteByNameManager
和WriteListByNameManager
方法写入数据到对应Sheet,调用Write
写入到excel文件。
public async Task<string> ExportAsync()
{
var userDto = new UserImportExportDto();
var settingDtoList = new List<SettingImportExportDto>();
var excelTemplateFilePath = "";
using var excelService = _excelFactory.Create(File.Open(excelTemplateFilePath, FileMode.Open, FileAccess.Read));
excelService.WriteByNameManager(userDto, "基本信息");
excelService.WriteListByNameManager(settingDtoList, "字典配置");
var resultFileSavePath = "";
excelService.Write(File.Open(resultFileSavePath, FileMode.OpenOrCreate, FileAccess.ReadWrite));
return resultFileSavePath;
}
总结
ExcelToObject.NPOI两行代码导出excel报表及读取数据,是通过每个sheet页内的名称管理器的值与对应代码中的类的属性名称相同,从而进行匹配,达到智能读取的功能
ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据的更多相关文章
- C#操作Excel文件(读取Excel,写入Excel)
看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1 ...
- NPOI 导入Excel和读取Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- NPOI操作excel之读取excel数据
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 一.下载引用 去NPOI官网http://npoi.codeplex. ...
- c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 using System.Reflection; using Excel = Microsof ...
- SpringBoot(十三)_springboot上传Excel并读取excel中的数据
今天工作中,发现同事在整理数据,通过excel上传到数据库.所以现在写了篇利用springboot读取excel中的数据的demo.至于数据的进一步处理,大家肯定有不同的应用场景,自行修改 pom文件 ...
- jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL
这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...
- ThinkPHP3.2.3使用PHPExcel类操作excel导入读取excel
方法一: 1. 下载PHPExcel并保存在如下位置: 2. 在控制器中引用 vendor("PHPExcel.PHPExcel"); $objReader = \PHPExcel ...
- POI导入excel时读取excel数据的真实行数
有很多时候会出现空的数据导致行数被识别多的情况 // 获取Excel表的真实行数 int getExcelRealRow(Sheet sheet) { boolean flag = false; fo ...
- NPOI复制模板导出Excel
本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...
- php读取excel文件的实例代码
php读取excel文件的实例代码. 代码: <?php /** * php读取excel文件 * by www.jbxue.com */ $this->loadexcel();//半酣p ...
随机推荐
- linux开机自启服务
前言:最近,有一个项目需要用到开机自动启动机房,所以就研究了一下 1.把node的快捷方式放在放在/usr/bin/(环境变量)下面,所有的命令默认是从这里面进行调用的 ln -s /home/too ...
- 7M与N的数学运算
m=eval(input()) n=eval(input()) a=m+n b=m*n c=m**n d=m%n e=max(m,n) print(a,b,c,d,e)
- ERP 与 CRM 之间有什么联系?
ERP与CRM都涉及到客户的管理,在客户信息数据里很大一部分是重合的,可以共用的,即ERP里的客户信息可以为CRM所用,CRM的客户信息,亦可为ERP所用!在关系上可以理解为CRM就是ERP的最前端, ...
- aws-cli命令-vpcs及subnets相关的查询
关于AWS上vpcs及subnets相关的查询,常用的命令如下: # 查询所有的vpc信息 aws ec2 describe-vpcs --output json # 查询所有所有的subnet相关的 ...
- 洛谷P7960 [NOIP2021] 报数 (筛法)
禁止报的数的生成规则与埃式筛法类似,考虑用筛法预处理可以报出的数字列表和不可报出的数字,从而 O(1) 回答每一组询问. 用check函数判断数字中是否含有7,用nx[i]记录数字i的下一个合法数. ...
- 使用 Kubeadm 部署 K8S安装
1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬 ...
- goroutine&waitgroup下载文件
0.1.索引 https://blog.waterflow.link/articles/1663078266267 当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错.那么我么我们可以利用g ...
- 知识图谱顶会论文(IJCAI-2022) TEMP:多跳推理的类型感知嵌入
IJCAI-TEMP:知识图谱上多跳推理的类型感知嵌入 论文地址: Type-aware Embeddings for Multi-Hop Reasoning over Knowledge Graph ...
- LcdTools如何通过PX01把EDP屏的EDID拷贝出来
PX01点EDP屏在上电过程会自动读取屏EDID,怎么把EDP EDID值拷贝出来呢? 在上电时序函数调用SetEdidRdShowEn(ON)指令开启EDID值读取显示功能.如下图 通过上述操作开机 ...
- C#中Enum的用法
1.定义枚举类型 public enum Test { 男 = 0, 女 = 1 } 2.获取枚举值 public void EnumsAction() { var s = Test.男;//男 va ...