.Net Core Excel导入导出神器Npoi.Mapper

使用NPOI在.NET Core中读取Excel文件是非常简单的 在.NET Core应用程序中,如果你需要读取和处理Excel文件,NPOI是一个强大且广泛使用的库。NPOI是一个跨平台的.NET库,它允许你在.NET Core应用程序中读取、写入和操作Excel文件。在本文中,我们将介绍如何使用NPOI库在.NET Core中读取Excel文件,并提供相应的源代码示例。首先,你需要在你的.NET Core项目中安装NPOI库。通过以上步骤,你就可以使用NPOI在.NET Core中读取Excel文件了。在上面的代码中,我们首先创建一个文件流,用于打开Excel文件。 阅读详情

前言

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

简介

关于Npoi.Mapper看名字我们就知道,它并不是一款创新型的软件,而是针对Npoi的二次封装增强了关于Mapper相关的操作。秉承着使用非常简单的原则,不过这样能够满足我们日常开发工作中很大一部分应用场景。它的GitHub地址为https://github.com/donnytian/Npoi.Mapper,目前Star并不多才240多,但是确实是非常好用,这里强烈推荐一波。接下来我们就大概演示一下的它的使用。

常规操作

Npoi.Mapper的主题内容包括两大块,一个是针对导入,一个是针对导出。接下来我们先来简单演示一下最基础的导入导出。首先我们新建一个Student类作为数据承载的载体,简单定义大致如下

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Sex { get; set; }
    public DateTime BirthDay { get; set; }
}

然后引入Npoi.Mapper的nuget包

<PackageReference Include="Npoi.Mapper" Version="3.5.1" />

导出操作

接下来我们构建一个Student集合,然后初始化一部分简单的数据,将这些数据导出到Excel,接下来做一个简单的演示

static void Main(string[] args)
{
      List<Student> students = new List<Student>
      {
          new Student{ Id = 1,Name="夫子",Sex="男",BirthDay=new DateTime(1999,10,11) },
          new Student{ Id = 2,Name="余帘",Sex="女",BirthDay=new DateTime(1999,12,12) },
          new Student{ Id = 3,Name="李慢慢",Sex="男",BirthDay=new DateTime(1999,11,11) },
          new Student{ Id = 4,Name="叶红鱼",Sex="女",BirthDay=new DateTime(1999,10,10) }
      };
      //声明mapper操作对象
      var mapper = new Mapper();
      //第一个参数为导出Excel名称
      //第二个参数为Excel数据来源
      //第三个参数为导出的Sheet名称
      //overwrite参数如果是要覆盖已存在的Excel或者新建Excel则为true,如果在原有Excel上追加数据则为false
      //xlsx参数是用于区分导出的数据格式为xlsx还是xls
      mapper.Save("Students.xlsx", students, "sheet1", overwrite: true, xlsx:true);
      Console.WriteLine("执行完成");
}

其中overwrite参数如果是要覆盖已存在的Excel或者新建Excel则为true,如果在原有Excel上追加数据则为false,说白了就是控制是新建Excel文件还是在原有基础上直接追加。xlsx参数是用于区分导出的Excel格式为xlsx还是xls。通过上述简单代码便可以实现Excel的导出功能,真的是非常简单,如果你只是进行简单的导出操作,通过Npoi.Mapper操作真的是不二的选择。这样导出的Excel效果如下所示
但是这样导出的Excel头信息为属性的名称,而且我们Student类中包含了一个时间字段BirthDay为DateTime类型,这个表示格式好像也不太符合我们常规的阅读习惯,那该怎么办呢?Npoi.Mapper为我们提供了两种处理方式,一种是通过Fluent的方式指定映射关系如下所示

var mapper = new Mapper();
//第一个参数表示导出的列名,第二个表示对应的属性字段
mapper.Map<Student>("姓名", s => s.Name)
    .Map<Student>("学号", s => s.Id)
    .Map<Student>("性别", s => s.Sex)
    .Map<Student>("生日", s => s.BirthDay)
     //格式化操作,第一个参数表示格式,第二表示对应字段
     //Format不仅仅只支持时间操作,还可以是数字或金额等
    .Format<Student>("yyyy-MM-dd", s => s.BirthDay);
mapper.Save("Students.xlsx", students, "sheet1", overwrite: true, xlsx:true);

经过上面相关操作之后导出后的效果如下所示还有一种形式是通过ColumnAttribute的形式在导出的实体类的属性上进行声明导出列相关设置,具体操作如下

public class Student
{
    [Column("学号")]
    public int Id { get; set; }
    [Column("姓名")]
    public string Name { get; set; }
    [Column("性别")]
    public string Sex { get; set; }
    [Column("生日",CustomFormat = "yyyy-MM-dd")]
    public DateTime BirthDay { get; set; }
}

通过这种方式操作和通过Fluent的效果是完全一样的,至于使用哪一种完全看个人喜好,不过我个人更喜欢在属性上直接声明的方式,这样看起来显得一目了然。
有时候我们可能需要将不同的数据源导入到同一个Excel的不同Sheet中,Npoi.Mapper也提供了这方面的支持,具体操作方式如下所示

static void Main(string[] args)
{
      //构建Student集合
      List<Student> students = new List<Student>
      {
          new Student{ Id = 1,Name="夫子",Sex="男",BirthDay=new DateTime(1999,10,11) },
          new Student{ Id = 2,Name="余帘",Sex="女",BirthDay=new DateTime(1999,12,12) }
      };
      //构建Person集合
      List<Person> persons = new List<Person>
      {
          new Person{ Id = 1,Name="陈某", Tel= 18833445566},
          new Person{ Id = 2,Name="柯浩然", Tel = 15588997766}
      };
      var mapper = new Mapper();
      //放入Mapper中
      //第一个参数是数据集合,第二个参数是Sheet名称,第三个参数表示是追加数据还是覆盖数据
      mapper.Put<Student>(students, "student",true);
      mapper.Put<Person>(persons, "person",true);
      mapper.Save("Human.xlsx");
}

不过很多时候我们是通过Web程序直接将数据转换为文件流返回的,并不会生成Excel文件,Npoi.Mapper很贴心的为我们提供了将数据读取到Stream的操作,操作方式如下

[HttpGet]
public ActionResult DownLoadFile()
{
    List<Student> students = new List<Student>
    {
        new Student{ Id = 1,Name="夫子",Sex="男",BirthDay=new DateTime(1999,10,11) },
        new Student{ Id = 2,Name="余帘",Sex="女",BirthDay=new DateTime(1999,12,12) },
        new Student{ Id = 3,Name="李慢慢",Sex="男",BirthDay=new DateTime(1999,11,11) },
        new Student{ Id = 4,Name="叶红鱼",Sex="女",BirthDay=new DateTime(1999,10,10) }
    };

    var mapper = new Mapper();
    MemoryStream stream = new MemoryStream();
    //将students集合生成的Excel直接放置到Stream中
    mapper.Save(stream, students, "sheet1", overwrite: true, xlsx: true);
    return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","Student.xlsx");
}

Save提供了几个重载方法,其中有一个就是将数据保存到Stream中,但是这里也踩到了一个坑,不过这个是Npoi的坑并不是Npoi.Mapper的坑,那就是Workbook.Write(stream)的时候会将stream关闭,如果继续操作这个Stream会报流已关闭的错误,而Npoi.Mapper的Save到Stream的方法恰恰是对这个方法的封装,这也是为何上面我没直接在File中直接返回Stream,而是将其转换为byte数组再返回的原因。

导入操作

上面我们演示了使用Npoi.Mapper将数据导出的场景,接下来我们来演示通过Npoi.Mapper的读取Excel的相关操作,操作也是非常的简单,话不多说直接上代码,比如我读取上面导出的Excel

//Excel文件的路径
var mapper = new Mapper("Students.xlsx");
//读取的sheet信息
var studentRows = mapper.Take<Student>("sheet1");
foreach (var row in studentRows)
{
    //映射的数据保留在value中
    Student student = row.Value;
    Console.WriteLine($"姓名:[{student.Name}],学号:[{student.Id}],性别:[{student.Sex}],生日:[{student.BirthDay:yyyy-MM-dd}]");
}

通过Take方法直接读取出来的是RowInfo集合,RowInfo是用来包装读取数据的包装类。通过它可以获取读取的行号,或读取过程中可能会出现异常情况,比如某一列读取失败,它会将列信息和报错信息记录下来,如果你不需要这些信息或者觉得遍历的时候比较麻烦想直接拿到需要的集合,可以通过如下方式转换一下

var studentRows = mapper.Take<Student>("sheet1");
//通过lambda获取到Student集合
var students = studentRows.Select(i => i.Value);

有的时候你可能不想定义一个POCO去接收返回的结果,而是想直接拿到读取信息,转换成你需要的数据格式。比如你想读取Excel中的数据,将结果转换为实体类直接入库,但是你不想定义一个专门的映射类去接收读取结果,这时候你需要一个动态类型去接收,而Npoi.Mapper恰恰提供了这样的功能,可以将Excel中的数据直接读取到dynamic中去,具体操作和上面类似

var mapper = new Mapper("Students.xlsx");
var studentRows = mapper.Take<dynamic>("sheet1");
foreach (var row in studentRows)
{
    var student = row.Value;
    Console.WriteLine($"姓名:[{student.姓名}],学号:[{student.学号}],性别:[{student.性别}],生日:[{student.生日:yyyy-MM-dd}]");
}

其中你要操作的字段名称和Excel的列名是一致的,比如我的Excel列名叫姓名,那么我读取的时候对应的属性名称也叫姓名。
同样的情况也存在于导入操作,比如许多情况下我们是通过Web接口直接上传的文件,这种场景下,我们通常能拿到上传的流信息,Npoi.Mapper也支持读取Excel文件流的形式获取Excel数据,如下所示

[HttpPost] 
public IEnumerable<Student> UploadFile(IFormFile formFile)
{
    //通过上传文件流初始化Mapper
    var mapper = new Mapper(formFile.OpenReadStream());
    //读取sheet1的数据
    return mapper.Take<Student>("sheet1").Select(i=>i.Value);
}

其他功能

除了上面介绍的主要功能之外Npoi.Mapper还提供了一些其他的功能,简单介绍一下几个比较实用的点

忽略操作

有时候我们的导出或导入数据可能想忽略某些列不导出,Npoi.Mapper为了我们提供了类似EF的Ignore操作

[Ignore]
public string IgnoredProperty { get; set; }

这样的话无论是导入还是导出都会忽略这个属性,即导出不会显示这个列,导入不会映射这一列的数据

合并单元格

如果我们导入的数据有一列数据的值是大家都拥有的,在Excel上可以通过合并单元格的操作来显示这一列,对于合并单元格的列,对于程序来讲就是等价于所有列都是同一个值,Npoi.Mapper为我们做了这种处理

[UseLastNonBlankValue]
public string ClassName { get; set; }

自定义Map规则

虽然默认情况下Npoi.Mapper能帮我们满足大部分的类型映射关系,但是有时候我们需要根据我们自己的规则处理处理数据映射关系,这时候我们需要用到Map功能,他有许多重载的方法,我们就查看一个比较常用的方法做参数讲解

/// <param name="columnName">对应Excel列的名称</param>
/// <param name="propertyName">对应实体的属性名称</param>
/// <param name="tryTake">该函数用于处理从Excel读取时针对单元格数据的处理</param>
/// <param name="tryPut">该函数用于处理将数据导出到Excel是针对源数据的处理</param>
public static Mapper Map<T>(this Mapper mapper, string columnName, string propertyName,
            Func<IColumnInfo, object, bool> tryTake = null,
            Func<IColumnInfo, object, bool> tryPut = null)
{
}

其中tryTake用于处理从Excel导出时针对单元格数据的处理,IColumnInfo代表数据的来源,object代表对应将Row导入到某个实体中。tryPut恰恰相反,用于处理将数据导出到Excel是针对源数据的处理。其中IColumnInfo代表要导出到的列信息,object代表数据的源。简单演示一下,比如我想将上述示例中,读取到Excel里的性别数据映射到实体中的时候做一下中英文的处理,就可以使用以下操作

var mapper = new Mapper("Students.xlsx");
mapper.Map<Student>("性别", "Sex", (c, t) => {
    Student student = t as Student;
    student.Sex = c.CurrentValue == "男" ? "MAN" : "WOMAN";
    return true;
}, null);

因为我是要读取Excel,所以使用tryTake函数,t代表target表示要映射到的实体,c代表读取到的单元格信息,我将读取到target里的数据做一下处理,如果在单元格中读取的是"男"那么对应到Student转换为"MAN",反之则为"WOMAN"。总之你想处理一下,自定义映射逻辑都可以使用这个功能。

总结

以上是我们对Npoi.Mapper的大致讲解,我个人还是非常推荐的。它的使用足够简单而且功能非常完善,因为它既可以处理Excel导入操作,也可以处理Excel导出操作。它很强大,因为它可以满足我们日常开发中,大部分关于导入导出Excel的场景。但是它还不够强大,因为它还存在一定的缺陷,而且许多细节可能还没考虑到。不过庆幸的是,它的源码非常的简单一共不到20个类,而且逻辑非常清晰。如果有的情况它真的不能满足,我们完全可以下载它的源码自己扩展操作。最后再次贴上它的GitHub地址https://github.com/donnytian/Npoi.Mapper如果大家有类似的场景可以尝试使用一下。

Npoi.Mapper:使用此工具可以导入或导出带有Excel文件的数据。 该工具是通过NPOI在强类​​型对象和Excel数据之间基于约定的映射器 恩波伊·马普(Npoi.Mapper) 通过NPOI(电报组 )在强类型对象和Excel数据之间基于约定的映射器。 这个项目完成了我的工作任务,我在项目中经常使用它。 随时提交错误或提出请求请求... v3现在支持导入和导出为dynamic类型。 从NuGet安装 在程序包管理器控制台中: PM> Install-Package Npoi.Mapper 从Excel获取强类型对象(XLS或XLSX) var mapper = new Mapper ( " Book1.xlsx " ); var objs1 = mapper . Take < SampleClass>( " sheet2 " ); // You can take objects from the same sheet with different type. var objs2 = mapper . Take < 立即下载

相关推荐

FPGA新手必看:XC7Z020最小系统搭建全攻略(附原理图解析)

本文为FPGA新手提供了XC7Z020最小系统搭建的完整实战指南。文章详细解析了电源架构、时钟复位、配置调试等关键硬件电路设计,并重点剖析了外围电路与端口引脚的连接要点及常见陷阱,帮助读者从零开始构建稳定可靠的开发平台。

weixin_29189377的博客 359

C#使用NPOI读取Excel内容问题解决

读取Excel2003版本及Excel2007版本,需要分别进行处理: FileStream fs = new FileStream(excelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (excelPath.IndexOf(".xlsx") > 0) { workbook = new...

qq_43026206的博客 3138

深度排查:网讯网卡WX1860AL4千兆网口降速百兆的硬件陷阱

本文详细剖析了网讯网卡WX1860AL4千兆网口降速至百兆的硬件故障排查过程。通过分析千兆以太网硬件原理,提供从网线、供电到PCB走线、焊接残留的标准化检修流程,并分享两种典型硬件陷阱(线序错误与焊锡短路)的实战修复案例,为硬件工程师解决类似传输速率问题提供系统性的诊断思路与方法。

a3b4c5的博客 1109

.net core 导入导出Excel(把Excel导入到数据库,把数据库数据导出到Excel中)。

/接着,使用NPOI库中的XSSFWorkbook类构造一个Excel工作簿对象(book),并将刚刚打开的文件流对象作为参数传入。//创建一个SeckillGoodMessageDto类型的DTO对象userss,并将该行的第一列和第二列单元格的值分别赋值给DTO对象的Title和ShopPhoto属性。//首先,使用File.Open方法打开指定路径的Excel文件,获取一个文件流(stream2)对象。//使用sheet对象的GetRow()方法,获取当前行的行对象,并将其赋值给row变量。

dd7734210的博客 3900

【半桥LLC】半桥LLC谐振开环闭环软启动DCDC变换器的设计与仿真

本文详细分析了半桥LLC谐振DC-DC变换器的开环与闭环控制设计原理,重点探讨了软启动功能的实现。通过仿真验证,展示了开环与闭环情况下的电压输出差异以及系统效率的提升。该研究为提高DC-DC变换器性能提供了参考。

2401_84610415的博客 2594

Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框

在9.0的系统产品rom定制化开发中,在一些产品中会出现在首次开机的时候,由于在开机动画播放完以后会出现几秒短暂的黑屏情况,然后进入默认Launcher,这在产品体验上 也是感觉到有点差,所以会要求在去掉这个首次开机黑屏的效果,和在启动过程中的 android is starting这个提示框的这些效果优化,接下来就分析下相关功能, 然后实现这个功能的开发

安卓兼职framework和app工程师的博客 3244

探秘Npoi.Mapper:轻松处理Excel数据的神器

在大数据时代,Excel作为日常工作中的数据交换与管理工具,依然扮演着重要角色。而[Npoi.Mapper](https://github.com/donnytian/Npoi.Mapper)则是一个强大的.NET开源库,它使得在.NET环境中与Excel文件交互变得异常简单,无论是导入数据还是导出数据,Npoi.Mapper都有出色的表现。 ## 项目介绍 Npoi.Mapper是基于[NP

gitblog_00086的博客 731

【数据分析】基于多组学数据整合的微生物与宿主互作网络构建及可视化分析

综上所述,本教程通过详细的步骤和方法,展示了如何整合微生物群落数据、宿主基因表达数据和代谢组数据,构建微生物与宿主互作网络,并进行可视化分析。这种方法为研究微生物与宿主之间的复杂关系提供了一种有力的工具,有助于推动相关疾病的研究和治疗。然而,在实际应用中,需要注意数据处理和分析过程中的各种问题,并结合实验验证来提高研究结果的可靠性和科学性。未来,随着多组学技术的不断发展和完善,以及数据分析方法的创新,相信我们能够更深入地理解微生物与宿主之间的互作机制,为疾病的预防、诊断和治疗提供更有力的支持。

专注生信领域 366

npoi xlsx 文件损坏_.Net Core Excel导入导出神器Npoi.Mapper

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

weixin_39560002的博客 383

嵌套学习 (Nested Learning, NL):赋予AI持续学习能力的革命性范式

嵌套学习(Nested Learning, NL)的核心哲学在于彻底颠覆传统深度学习中将模型架构(Architecture)与优化算法(Optimization)视为两个独立组件的“扁平化”视角 。传统方法通常将神经网络的结构设计和其训练过程分离开来,模型架构是预先定义好的静态蓝图,而优化算法(如SGD、Adam)则是一个外部的、统一的规则引擎,负责在训练期间调整模型参数 。这种分离的视角隐藏了模型内部不同组件之间复杂的梯度流和动态更新过程,将整个学习系统视为一个单一层次的优化问题。然而,嵌套学习范式提出,

步子哥的博客 487

​​手把手教你学PCIE--ATU 的 Bar 匹配模式与地址匹配模式详解​

摘要: ATU(地址转换单元)提供两种地址匹配模式:Bar匹配模式基于PCI设备的BAR寄存器自动映射虚拟地址(只需配置物理基址),适用于标准PCI设备DMA;地址匹配模式需显式配置虚拟与物理地址范围,适合自定义映射场景。核心区别在于匹配依据(BAR自动推导vs人工定义),Bar模式简化配置,地址模式更灵活。

MHD0815的博客 378

使用Npoi Mapper导入导出 excel表格

基于NPOI.Mapper 导入导出excel文件

qq_42172560的博客 895

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频)

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频链接)

weixin_46713695的博客 1万+

netcore导入、导出Excel文件

BS系统中,利用NPIO导入导出Excel文件

andsll的专栏 1319

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

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NPOI “发现 中的部分内容有问题,是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法

NPOI “发现 中的部分内容有问题,是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法

weixinhmz的博客 807

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NPOI中出现“是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法

把几个ASP.NET中制作Excel报表用NPOI改写后(原来用COM方式),立即有人反映,打开下载的Excel报表时,有提示“是否要恢复此工作薄的内容?如果信任此工作薄的来源,请单击“是”。。。的提示信息,如果选“时”则打印时第二页开始没有(重复的)标题行。         仔细检查发现,俺用Excel2000制作的报表模板文件,使用NPOI中RemoveSheetAt()函数删除表单后,在E

HuLihui's Blog 8330

.net Core 使用NPOI導入EXCEL數據

指定读取excel工作薄sheet的名称</param>/// <param name="sheetName">指定读取excel工作薄sheet的名称</param>/// <param name="sheetName">指定读取excel工作薄sheet的名称</param>/// <param name="fileName">文件完整路径名</param>/// <param name="file">导入Execl文件

l350z的专栏 294

关于c#调用NPOI读写本地xlsx文件后,用Excel读取这个文件时,出现不可读内容的提示和修复弹窗的解决办法

c#、NPOI、xlsx、Excel、文件损坏、文件报错、修复后另存为

4485

NPOI.MAPPER 导出Excel只有10条数据

var mapper = new Npoi.Mapper.Mapper(path); //读取的sheet信息 var plat_MachineRNAndFBNConfig_DtoRows = mapper.Take<Plat_MachineRNAndFBNConfig_Dto>(); List<Plat_MachineRNAndFBNConfig_Dto> plat_MachineRNAndFBNConfi...

weixin_46879188的博客 663

.net core NPOI以及NOPI mapper

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

weixin_43632687的博客 1061

Npoi.Mapper 使用教程

Npoi.Mapper 是一个基于 NPOI 的库,用于简化在 .NET 应用程序中导入和导出 Excel 文件的过程。它通过提供一个约定基础的映射器,使得将强类型对象与 Excel 数据之间进行转换变得更加容易。Npoi.Mapper 的主要优势在于其简单易用的 API 和强大的功能,能够满足大多数日常开发中关于 Excel 导入导出的需求。 ## 项目快速启动 ### 安装 Npoi.Ma

gitblog_01008的博客 1509

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

https://www.cnblogs.com/Can-daydayup/p/12501400.html .NET Core使用NPOI导出复杂,美观的Excel详解

请你吃哈哈屁的博客 424

.NET Core使用NPOI实现Excel的导入导出

本篇文章将讲解如何在.NET Core项目中使用NPOI实现将数据库数据导出为Excel文件,以及如何将Excel文件内容导入到数据库.

xll的博客 2635
上一篇: 深入理解.NET MemoryCache
下一篇: C# 如何快速复制一个列表
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值