C# 使用 NPOI 读取 Excel 转为 Entity

告别NPOI和EPPlus:MiniExcel在.NET Core中的Excel处理新选择 本文介绍了在.NET Core中处理Excel文件的新选择MiniExcel。相较于传统的NPOI和EPPlus,MiniExcel专注于高性能、低内存消耗的数据读写,通过流式处理架构,能高效应对大数据量导入导出场景,显著提升开发效率并降低服务器资源压力。 阅读详情

感谢这篇文章,[Npoi]Npoi导入Excel, 转为Entity
原文章使用了CustomAttribute,本文改为直接用Propertie,写着方便-_-||

项目场景:

C# 使用 NPOI 读取 Excel 转为 Entity

用DataTable存储读取到的Excel数据,再走反射那套操作


解决方案:

        public class Archive
        {
            public string ValueID { get; set; } = string.Empty;
            public string ValueName { get; set; } = string.Empty;
        }
        static void Main(string[] args)
        {
			var Archives = new ExcelReader(Path.Combine(path, "Archive.xlsx")).ToList<Archive>();
			Console.WriteLine(Archives.First().ValueID);
        }
    public class ExcelReader
    {
        public string FilePath { get; set; } = string.Empty;
        public int SheetIndex { get; set; } = 0;
        public string FileExt { get { return Path.GetExtension(FilePath).ToLower(); } }

        private DataTable _dataTable;

        /// <summary>
        /// 初始化文件路径和Sheet序号
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="sheetIndex"></param>
        public ExcelReader(string filePath, int sheetIndex = 0)
        {
            FilePath = filePath;
            SheetIndex = sheetIndex;
        }


        /// <summary>
        /// 转为指定类型
        /// </summary>
        /// <typeparam name="T"> </typeparam>
        /// <returns> </returns>
        public List<T> ToList<T>()
        {
            if (_dataTable is null) ToDataTable();

            var list = new List<T>();
            var type = typeof(T);
            var properties = type.GetProperties();
            foreach (DataRow row in _dataTable.Rows)
            {
                var t = Activator.CreateInstance<T>();
                foreach (var property in properties)
                {
                    var prop_name = property.Name;
                    var value = row[prop_name];
                    if (value != DBNull.Value)
                    {
                        var d = Convert.ChangeType(value, property.PropertyType);
                        property.SetValue(t, d);
                    }
                }
                list.Add(t);
            }
            return list;
        }


        /// <summary>
        /// Excel转为DataTable
        /// </summary>
        /// <returns> </returns>
        private ExcelReader ToDataTable()
        {
            _dataTable = new DataTable();
            using (var fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read))
            {
                IWorkbook? workbook;

                if (FileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); } else if (FileExt == ".xls") { workbook = new HSSFWorkbook(fs); } else { workbook = null; }

                if (workbook == null) { throw new Exception("Wrong File Type. Use .xlsx or .xls"); }

                var sheet = workbook.GetSheetAt(SheetIndex);
                if (sheet == null)
                {
                    throw new Exception("Excel sheet not found");
                }

                var headerRow = sheet.GetRow(0);
                var headerRowCount = headerRow.LastCellNum;
                for (var i = headerRow.FirstCellNum; i < headerRowCount; i++)
                {
                    var column = new DataColumn(headerRow.GetCell(i).StringCellValue);
                    _dataTable.Columns.Add(column);
                }

                for (var i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                {
                    var row = sheet.GetRow(i);
                    var dataRow = _dataTable.NewRow();
                    for (var j = row.FirstCellNum; j < headerRowCount; j++)
                    {
                        if (row.GetCell(j) != null)
                        {
                            dataRow[j] = row.GetCell(j).ToString();
                        }
                    }

                    _dataTable.Rows.Add(dataRow);
                }
            }

            return this;
        }
    }
C# WinForms实战:Windows桌面工具快速开发指南 WinForms是.NET框架中面向Windows原生桌面应用开发的核心技术,依托Visual Studio可视化设计器与成熟API体系,实现低门槛、高确定性的GUI构建。其核心原理在于事件驱动模型与UI线程安全机制的深度整合,技术价值体现在极短的学习曲线、零运行时依赖(.NET Framework预装率高)及对Windows系统能力的直接调用能力。典型应用场景包括企业内部数据采集工具、Excel自动化助手、轻量级系统监控客户端等需‘双击即用、免安装、强兼容’的生产级工具开发。本文聚焦C# WinForms 阅读详情

相关推荐

AutoCAD .NET API二次开发实战:C#插件开发与图形自动化处理

图形自动化处理是工程设计领域提升效率的关键技术,其核心原理是通过编程接口实现对CAD软件内部对象模型的精准控制。在AutoCAD生态中,.NET API提供了对图形数据库、实体、图层等底层对象的完全访问能力,技术价值在于能够将繁琐的手动操作转化为可重复执行的自动化流程。通过C#等语言进行二次开发,可以创建功能强大的插件,应用于参数化绘图、批量属性提取、智能批处理等典型场景。本文聚焦于AutoCAD .NET API的实战应用,详细解析了从环境搭建、命令注册到高级图形处理的全过程,并深入探讨了事务管理、选择集

weixin_34372728的博客 290

C# Excel文件读取转换实体类

本篇分享一个C#Excel文件读取的帮助类,直接上Demo 使用NOPI: 没有的胸嘚点下面链接自己提取,提取码:wcwb https://pan.baidu.com/s/1DPXYPPqThE23H0iKtwoYmA 工具类: /// <summary> /// 文件读取类 /// </summary> public class FileReadU...

情疏的博客 4129

c#Excel导入导出实体代码(GemBox),非常简单好用

网上excel导入导出的例子一大把,但是想找个真正自己想要的,而且不报错的,确实比较难。之前我做项目的时候,是因为做导入的时候,要控制excel的格式, 一直没有找到合适的例子来参考,而且看有些例子,说着是很简单,但是弄起来特麻烦,后面通过一个在微软做vs开发工具的同学搞了个例子,用gembox的方式给实现了。所以想趁着现在比较空闲的时候,分享给大家! Bin文件夹里面的dll文件,需添加引用下 m_test文件夹是实例代码 UploadFile文件夹里面的lesson.xls是首先创建好的excel模板文件,导入的时候思路其实就是这样的,excel文件上传,然后通过程序去找这个excel文件里面的工作表,再进行行和列的匹配,把工作表里面的数据插入到数据库

ExcelUtils(导入Excel转换实体类)

总结 首先创建实体类,然后新建excel文件,第一行的值为Project对应的属性值。 写数据访问对象ProjectDao ,继承自JpaRepository。 ExcelUtils 通用工具类读取excel文件,根据project对象的属性对应赋值(可以实现数据格式的转换,如日期,时间戳,枚举、基本类型),生成project对象。 FileController将数据保存到数据库。 1、Project 实体类 public class Project { private String id;

qq_34157673的博客 6504

C#中excel高级运用实体类 接口

C#中excel高级运用实体类 接口

接口开发时,利用Excel快速生成实体类

接口开发的时候,直接把接口文档拷到Excel,然后利用Excel快速生成实体类,包含注释内容 ,可以节省大部分重复劳动

java解析Excel文件,接口导入Excel文件,解析

接口参数 @PostMapping(value = Hplus.platform.trade.batch_post_sale, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Mono<HplusResponse<BatchPostSaleByPosSaleNoResultBo>> batchPostSaleByPostSaleNoList(@RequestPart(name = "file") FilePart

石光辉的博客 736

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)

简单介绍了X-BAR。

whyorwhnt的专栏 2万+

ExcelUtil读取excel表中的数据并做相关处理

项目中有时要上传一些excel表做批量处理。 1.首先定义接口接收文件 public WebResponse<Boolean> iportData(@RequestParam("fbody")MultipartFile file){ InputStream inputStream=null; try { inputStream = file.getInputStream...

jia1506的博客 3796

使用KITTI数据集测试不同算法的性能

该文章将使用同一个kitti数据集来测试不同算法的性能,目前已经测试的算法包括:LIO-SAM,FAST-LIO2,Point-LIO,Faster-LIO。

wwtx的博客 2586

【QMIX】一种基于Value-Based多智能体算法

文章目录1. QMIX 解决了什么问题(Motivation)2. QMIX 怎样解决团队收益最大化问题(Method)2.1 算法大框架 —— 基于 AC 框架的 CTDE(Centralized Training Distributed Execution) 模式 QMIX 是一种基于 Value-Based 的多智能体强化学习算法(MARL),其基本思想来源于 Actor-Critic 与 DQN 的结合。使用中心式学习(Centralized Learning)分布式执行(Distributed

qq_38638132的博客 9862

用Visual Studio(C#) 实现Excel数据导入(映射)

EXCEL小数据量导入

Luyuling的博客 5177

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

C#实现从EXCEL文件读取数据到SqlServer数据库

用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。 先创建一个实体类: [Table("Customer") ] pu...

dietiaoqu8206的博客 660

BQ4050开发进阶(二):Protections参数优化策略与实战解析

本文深入解析了BQ4050电池管理芯片中Protections参数的优化策略与实战方法。针对电压、电流、温度等核心保护功能,详细阐述了如何根据具体电芯特性、负载场景和环境因素,精细调整CUV、COV、OCC/OCD等阈值与延时,以在确保电池绝对安全的前提下,实现极致的用户体验与系统可靠性。

rgv234567的博客 483

40-基于STM32与LD3320的智能语音调光台灯开发全攻略(代码+硬件+调试心得)

本文详细介绍了基于STM32与LD3320的智能语音调光台灯开发全攻略,包括硬件设计、软件实现和调试心得。项目利用STM32单片机控制LD3320语音识别模块,实现语音控制开关和PWM调光功能,适合非接触式操作场景。文章还分享了硬件选型、PWM调光算法优化及常见问题解决方案,为开发者提供完整参考。

weixin_29163797的博客 326

C#Winform使用NPOI获取word中的内容

本文简单介绍了在C#Winform中如何使用NPOI读取word中的内容。

mingupup的博客 889

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 348

C# Excel导入导出

/// <summary> /// 企业信息Excel批量导入 需要先引入NPOI /// </summary> /// <returns></returns> public ActionResult ImportEnterpriseInfomation() ...

weixin_30414245的博客 139

Matlab安装硬件支持包、simulink离线安装硬件支持包安装,离线安装ESP32、stm32等安装包,Are you up-to-date on SoftWare Maintenance?

注意:如果提示出现“没有可从此位置安装的兼容支持包后,这个问题,请查看步骤5,是不是没有按照步骤5进行操作.一般情况下出现“没有可从此位置安装的兼容支持包”后,重新安装选择了默认路径就可以成功。如果不是很清楚,直接安装在默认的文件夹下面,即使这个文件夹下没有matlab相关的文件夹,也要这么下载,没有为什么,切记尽量按默认路径安装,更改下载的路径不成功,别怪我没提醒。:下载到哪里非常重要,如果下载的不是默认的路径下,就需要将其中这个的是这个archives文件夹,连同其他文件一并要复制出来,拷贝到。

pvmsmfchcs的博客 1746

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#高效读取Excel:MiniExcel三种数据映射策略实战解析

本文深入解析了C#中使用MiniExcel高效读取Excel数据的三种策略:行列索引、标题行名称和强类型反序列化。通过对比分析各方式的适用场景、性能表现和代码示例,帮助开发者根据实际需求选择最佳方案,提升Excel数据处理效率。特别适合需要处理大文件或复杂格式的C#开发者。

weixin_30756499的博客 156

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在 ASP.NET Core 6.0 Web API 中将 Excel 文件数据上传并保存到数据库中

在 ASP.NET Core 6.0 Web API 中将 Excel 文件数据上传并保存到数据库中,本文将探讨使用 ASP.NET Core Web API 上传 Excel 文件并将其数据保存到数据库的分步过程。我们将利用NPOI库和 Entity Framework Core 来实现此功能。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 7082

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MVC Excel文件的导入和导出

Excel文件的导入和导出 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Visual Studio 2015 与Excel文件的导入和导出 作者:黄富滔 撰写时间:2020年08月09日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

weixin_47221159的博客 275

petapoco writetoserver excal批量添加数据库

现在网的petapoco 批量添加数据库的源码很少, 自己在网上找了一些资料, 都是拼接 sql 语句,感觉不是很理想。自己有 writetoserver,写了一个方法 。 下面是主要的writetoserver写入数据库代码 本次主要是excal 批量添加到数据库 首先nuget 引入NPOI的包   action 中的代码 1

lyj123net的专栏 1254
上一篇: C# Win10 多屏自启浏览器
下一篇: Winform小工具的自动更新功能实现
wooderZ
博客等级 码龄9年 32粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值