当前位置: 首页 > news >正文

.net core NPOI以及NOPI mapper

我们在日常开发中对Excel的操作可能会比较频繁,好多功能都会涉及到Excel的操作。在.Net Core中大家可能使用Npoi比较多,这款软件功能也十分强大,而且接近原始编程。但是直接使用Npoi大部分时候我们可能都会自己封装一下,毕竟根据二八原则,我们百分之八十的场景可能都是进行简单的导入导出操作,这里就引出我们的主角Npoi.Mapper了。

  1. 引入包
    需要注意二者对版本要求很高需要"对应"
<PackageReference Include="NPOI" Version="2.5.6" />
<PackageReference Include="Npoi.Mapper" Version="4.1.0" />
  1. 定义实体类
    public class Person{[Column("姓名")]//对应excel中的列名就是姓名public string Name { get; set; }[Column("年龄")]public int Age { get; set; }[Column("出生日期", CustomFormat = "yyyy/MM/dd")]public DateTime Birthday { get; set; }}
  1. 导入
[HttpPost]
public async Task<List<Person>> Upload(IFormFile formFile)
{var mapper = new Mapper(formFile.OpenReadStream());List<Person>  persons = mapper.Take<Person>("sheet1").Select(x=>x.Value).ToList();return persons;
}
  1. 输出文件流
[HttpGet]
public ActionResult DownLoadFile()
{List<Person> persons = new List<Person>{new Person(){Name = "hhh",Age=100,Birthday=new DateTime(1990,11,11)}};var mapper = new Mapper();MemoryStream stream = new MemoryStream();//将students集合生成的Excel直接放置到Stream中mapper.Save(stream, persons, "sheet1", overwrite: true, xlsx: true);return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "person.xlsx");
}
  1. 忽略操作
    有时候我们的导出或导入数据可能想忽略某些列不导出,Npoi.Mapper为了我们提供了类似EF的Ignore操作,这样的话无论是导入还是导出都会忽略这个属性,即导出不会显示这个列,导入不会映射这一列的数据
[Ignore]
public string IgnoredProperty { get; set; }
  1. 合并单元格
    如果我们导入的数据有一列数据的值是大家都拥有的,在Excel上可以通过合并单元格的操作来显示这一列,对于合并单元格的列,对于程序来讲就是等价于所有列都是同一个值,Npoi.Mapper为我们做了这种处理
[UseLastNonBlankValue]
public string ClassName { get; set; }

官网

相关文章:

.net core NPOI以及NOPI mapper

我们在日常开发中对Excel的操作可能会比较频繁&#xff0c;好多功能都会涉及到Excel的操作。在.Net Core中大家可能使用Npoi比较多&#xff0c;这款软件功能也十分强大&#xff0c;而且接近原始编程。但是直接使用Npoi大部分时候我们可能都会自己封装一下&#xff0c;毕竟根据二…...

分布式锁(redisson,看门狗,主从一致性)

目录 分布式锁一&#xff1a;基本原理和实现方式二&#xff1a;分布式锁的实现1&#xff1a;分布式锁的误删问题2&#xff1a;解决误删问题 三&#xff1a;lua脚本解决多条命令原子性问题调用lua脚本 四&#xff1a;Redisson1&#xff1a;redisson入门2&#xff1a;redisson可重…...

openEuler 服务器Python自动化安装WEB服务器和文件上传服务(1)

一、系统准备 我们的服务器采用了 openEuler 22.03 (LTS-SP4) 的初始化服务器模式安装 二、安装步骤 &#xff08;一&#xff09;安装依赖库 在终端中运行以下命令确保系统安装了必要的依赖&#xff1a; sudo dnf install -y python3上述 Python 脚本中的依赖库会在运行 Py…...

【Python游戏开发】石头剪刀布游戏(附完整Python完整代码)

石头剪刀布游戏:Pygame实现 结果图前言核心函数思考步骤实现原理和公式代码实现结论结果图 前言 石头剪刀布是一种经典的猜拳游戏,简单易玩但却蕴含着一定的策略性。本文将介绍如何使用Python和Pygame库开发一个简单的石头剪刀布游戏,并探讨其中的核心功能实现和思考过程。 …...

ctfshow(94,95)--PHP特性--strpos函数

建议先学习intval函数相关内容 Web94 源代码&#xff1a; include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num"4476"){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die(&qu…...

C++ --- 多线程的使用

目录 一.什么是线程&#xff1f; 线程的特点&#xff1a; 线程的组成&#xff1a; 二.什么是进程&#xff1f; 进程的特点&#xff1a; 进程的组成&#xff1a; 三.线程与进程的关系&#xff1a; 四.C的Thread方法的使用&#xff1a; 1.创建线程&#xff1a; 2.join(…...

百度笔试(10.29)

判断s字符串是否可以通过添加某些字符变成t字符串&#xff0c;s是否是t的子序列 s input() n int(input()) st set() res [] for idx in range(n):t input()if t in st or len(t) < len(s):continuest.add(t)i,j 0,0while i < len(s) and j < len(t):if s[i] …...

数据库版本更新后,如何迁移数据?

数据库版本更新后迁移数据是一个需要谨慎处理的过程。以下是一般步骤和最佳实践&#xff1a; 1. **备份数据**&#xff1a; 在进行任何迁移之前&#xff0c;确保对现有数据库进行完整备份。这可以是物理备份&#xff08;如数据库文件的拷贝&#xff09;或逻辑备份&#xff…...

Chrome与火狐的安全功能全面评估

在当今数字化时代&#xff0c;网络安全已成为用户最为关注的问题之一。作为两款广受欢迎的浏览器&#xff0c;Chrome和火狐&#xff08;Firefox&#xff09;都提供了多种安全功能来保护用户的在线隐私和数据安全。本文将全面评估这两款浏览器的安全功能&#xff0c;帮助用户更好…...

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式&#xff08;Retry Pattern&#xff09; 定义 重试模式&#xff08;Retry Pattern&#xff09;是一种微服务中的设计模式&#xff0c;用于在临时性失败&#xff08;如网络故障或暂时不可用的服务&#xff09;发生时&#xff0c;自动重新尝试请求&…...

DNS配置

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 正反向解析 [rootlocalhost ~]# vim /etc/named.conf options {listen-on port 53 { 192.168.111.130; };directory "/var/named&quo…...

【Linux指令】---获取进程的PID

获取进程的PID getpid()函数...

在centos中安装cmake

安装依赖工具: sudo yum install -y epel-release sudo yum groupinstall -y "Development Tools" sudo yum install -y wget wget 下载 CMake 3.24 的压缩包: wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.tar.gz …...

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线&#xff0c;因为行业网络安全要求&#xff0c;需要做等保测评&#xff0c; 通过第三方漏扫工具扫描系统&#xff0c;漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞&#xff0c;具体结果如下&#xff1a; 1、ZooKeeper 未授权访问【…...

Docker Compose一键部署Spring Boot + Vue项目

目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …...

【maven】idea执行了maven的install命令给本地安装项目依赖包 安装后删除

目录 事件起因环境和工具操作过程解决办法1、找到对应的目录下的文件&#xff0c;手动去删除&#xff0c;比如我的依赖库的路径是D:\qc_code\apache-maven-3.8.2\repository 我只需要找到这个目录下对应的依赖包进行手动删除即可&#xff08;不推荐&#xff0c;强行删除文件夹文…...

Android中的Handle底层原理

先上结论: 一个小小的Handle,就能看出你对Android底层源码理解的深浅。 老规矩,如果你能看懂我上面画的这张草图,这篇文章你可以直接跳过! 开干! 1、先对Handle在Android系统中是如何发挥作用的做一个小结: 1)每一个线程,包括UI主线程,有一个ThreadLocalMap变量:…...

最简单方式SSH连接局域网中另一台电脑的WSL2

1、首先确认一下WSL2中的SSH服务是否开启&#xff1a; 先安装更新一下&#xff0c;再安装一下ssh服务模块&#xff0c;这里很多人都每安装过。 sudo apt update sudo apt upgrade sudo apt install openssh-server 2、配置SSH服务器&#xff1a; 打开配置文件&#xff0c;这…...

热点聚焦:AI在医疗保健领域的深度渗透与变革

内容概要 随着人工智能技术的不断进步&#xff0c;我们正在见证一个充满奇迹的转变&#xff0c;尤其是在医疗保健领域。这种转变不仅仅涉及到提高效率&#xff0c;更在于重新定义我们对疾病诊断和治疗方案的理解。通过智能算法&#xff0c;AI能够在早期识别潜在的健康问题&…...

模板方法模式:定义算法框架的设计模式

1. 引言 在软件开发中&#xff0c;算法的实现通常是可变的&#xff0c;但其基本步骤往往是相对固定的。模板方法模式&#xff08;Template Method Pattern&#xff09;正是为了解决这一问题而设计的&#xff0c;它通过定义一个操作中的算法框架&#xff0c;将一些步骤的实现延…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...