.NET Core 使用NPOI读取Excel返回泛型List集合
我是一名 ASP.NET 程序员,专注于 B/S 项目开发。累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html
网上有很多关于npoi读取excel表格的例子,很多都是返回一个Datatable的对象,但是我需要的是一个list集合,这里就需要把Datatable转成自己需要的List集合,所以,我封装了一个方法,传入class对象就能返回相应的list对象。
首先先看效果图,如下:
模板
一共有4列,有很多行,其中只有2行有数据,如下图:
特性
首先,定义一个特性,意义是对象的属性对应表格的哪一列,代码如下:
- public class ColumnAttribute: Attribute
- {
- public ColumnAttribute(int index)
- {
- Index = index;
- }
- public int Index { get; set; }
- }
对象模型
将表格数据读取出来,转换成相应的对象集合,在对象的属性标注上面定义的特性,代码如下:
- public class TestModel
- {
- [Column(0)]
- public string Name { get; set; }
- [Column(1)]
- public string Url { get; set; }
- [Column(2)]
- public string Date { get; set; }
- [Column(3)]
- public string Remark { get; set; }
- }
封装的方法
nuget安装npoi:
- Install-Package DotNetCore.NPOI -Version 1.2.2
代码如下:
- public class ExcelHelper
- {
- /// <summary>
- /// 读取excel转换成list集合
- /// </summary>
- /// <typeparam name="T">对象</typeparam>
- /// <param name="stream">文件流</param>
- /// <param name="startIndex">从第几行开始读取</param>
- /// <param name="sheetIndex">读取第几个sheet</param>
- /// <returns></returns>
- public static IList<T> GetList<T>(Stream stream, int startIndex, int sheetIndex = 0)
- where T : class
- {
- IList<T> ts = new List<T>();
- try
- {
- IWorkbook workbook = WorkbookFactory.Create(stream);
- var sheet = workbook.GetSheetAt(sheetIndex);
- if (sheet != null)
- {
- IRow firstRow = sheet.GetRow(0);
- //一行最后一个cell的编号 即总的列数
- int cellCount = firstRow.LastCellNum;
- //最后一列的标号
- int rowCount = sheet.LastRowNum;
- for (int i = startIndex; i <= rowCount; ++i)
- {
- //获取行的数据
- IRow row = sheet.GetRow(i);
- if (row == null) continue; //没有数据的行默认是null
- {
- T model = Activator.CreateInstance<T>();
- for (int j = row.FirstCellNum; j < cellCount; ++j)
- {
- if (row.GetCell(j) != null)
- {
- var rowTemp = row.GetCell(j);
- string value = null;
- if (rowTemp.CellType == CellType.Numeric)
- {
- short format = rowTemp.CellStyle.DataFormat;
- if (format == 14 || format == 31 || format == 57 || format == 58 || format == 20)
- value = rowTemp.DateCellValue.ToString("yyyy-MM-dd");
- else
- value = rowTemp.NumericCellValue.ToString();
- }
- else
- value = rowTemp.ToString();
- //赋值
- foreach (System.Reflection.PropertyInfo item in typeof(T).GetProperties())
- {
- var column = item.GetCustomAttributes(true).First(x => x is ColumnAttribute) as ColumnAttribute;
- if (column.Index == j)
- {
- item.SetValue(model, value);
- break;
- }
- }
- }
- }
- ts.Add(model);
- }
- }
- }
- }
- catch (Exception)
- {
- throw;
- }
- finally
- {
- if (stream != null) stream.Close();
- }
- return ts;
- }
- }
调用代码:
- static void Main(string[] args)
- {
- FileStream fs = new FileStream(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "/test.xlsx", FileMode.Open, FileAccess.Read);
- var temp = ExcelHelper.GetList<TestModel>(fs, 3);
- var json1 = Newtonsoft.Json.JsonConvert.SerializeObject(temp.Where(x => !string.IsNullOrWhiteSpace(x.Name)).ToList());
- Console.WriteLine(json1);
- Console.WriteLine("ok");
- Console.ReadKey();
- }
最后,就出现了文章最开始的效果图。
转载于:https://down.itsvse.com/k/0tmhog.html
.NET Core 使用NPOI读取Excel返回泛型List集合的更多相关文章
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- 使用NPOI读取Excel数据到DataTable
如今XML文件的存储格式大行其道,可是也不是适用于全部情况,非常多单位的数据交换还是使用Excel的形式.这就使得我们须要读取Excel内的数据.载入到程序中进行处理.可是如何有效率的读取,如何使程序 ...
- NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理
NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...
- NPOI读取Excel表格类
public class NPOIHelper { private HSSFWorkbook workbook; public static IWorkbook Lo ...
- 使用NPOI读取Excel数据并写入SQLite
首先,我们来建一个数据库,我们就叫Hello.db(不一定是db后缀,你可以sqlite,sqlite3,db3)都可以作为识别,然后往里面建一个空的表格,如下图所示 然后建一个Excel表格,往表格 ...
- NPOI读取Excel遇到的坑
NPOI是POI的.NET版本.POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件.NPOI在.NET环境下使用,能读写Excel/Word文件. ...
- 使用NPOI读取Excel出错
使用NPOI读取Excel出错,错误信息:java.io.IOException: Invalid header signature; read 4503608217567241, expected ...
- asp.net 使用NPOI读取excel文件
asp.net 使用NPOI读取excel文件内容 NPOI下载地址:NPOI public class ExcelHelper { /// <summary> /// 读取Excel文件 ...
- 使用NPOI读取Excel表格内容并进行修改
前言 网上使用NPOI读取Excel文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/restran/p/38894 ...
随机推荐
- 诚聘.NET架构师、高级开发工程师(2019年8月29日发布)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司 公司简介 七二四科技有限公司成立于2015年,成立之初便由金茂资本按估值2亿投资2200万,进行“健康724”平台搭建,2017 ...
- Create an XAF Application 创建一个XAF应用程序
This topic describes how to use the Solution Wizard to create XAF applications and specify a connect ...
- 科技风商务项目管理PPT模板
模板来源:http://ppt.dede58.com/peixunyanjiang/26267.html
- java 和 spring 的异步
spring 的 async 注解 https://www.baeldung.com/spring-async@Async will make it execute in a separate thr ...
- Scala字符穿插值器
从2.10.0版本开始,Scala提供了三种创新的字符串插值方法: s.f 和 raw 于2.11.0版本开始,用于模式匹配patter match中 小结: s: s"Hello, $na ...
- docker介绍和安装(一)
虚拟化简介 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...
- 谈谈你对OOM的理解?
(1)整体架构 (1)ByteBuffer使用native方法,直接在堆外分配内存. 当堆外内存(也即本地物理内存)不够时,就会抛出这个异常 ----GC Direct buffer memo ...
- Windows10下Git环境变量配置
一.确定Git正确安装并能使用 右键项目目录,检查Git版本: 输入: git --version 二. 配置环境变量 右键我的电脑 --> 属性 点击高级系统设置 --> 环境变量 - ...
- shiro异步请求返回JSON响应
shiro异步请求返回JSON响应 需求1:当shiro请求资源,但是没有进行认证时,默认是进行重定向,现在需要返回JSON响应.注意异步请求,服务器重定向后,ajax拿到的是浏览器重定向后的到的页面 ...
- 数据驱动表格| 根据json数据,自动生成合并式table
1.数据驱动表格 2.数据驱动表格(2)