让 .Net 更方便的导入导出Excel

Intro

因为前一段时间需要处理一些 excel 数据,主要是导入/导出操作,将 Excel 数据转化为对象再用程序进行处理和分析,没有找到比较满意的库,于是就自己造了一个轮子,屏蔽掉了 xlsx 与 xls 的差别,屏蔽了 Npoi 操作 Excel 的细节,提供简单容易上手的 api。完整的 API 列表请查看:https://weihanli.github.io/WeihanLi.Npoi/docs/api/WeihanLi.Npoi.html

导入/导出

添加 nuget 包引用 WeihanLi.Npoi

根据 excel 文件获取一个 IWorkbook 对象,支持 *.xls/*.xlsx

  1. IWorkbook workbook = ExcelHelper.LoadExcel("excelFilePath");

将 Excel 文件的第一个 sheet 里的内容转成 list 对象

  1. List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");

将 Excel 文件的第一个 sheet 里的内容转成 DataTable 对象

  1. DataTable dataTable = ExcelHelper.ToDataTable("excelFilePath");

将 list 对象导出到 Excel 字节数组

  1. List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");
  2. entityList.ToExcelBytes();

将 list 对象导出到 Excel 文件

  1. List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");
  2. entityList.ToExcelFile("excelFilePath");

自定义配置

默认的导入导出是按照属性名为导出的列名称的,如果不能满足或者想要自定义某些属性不导出或设置导出顺序,可以通过配置实现

提供了两种配置方式,一种是使用 Attribute 方式来配置,第二种是使用 FluentAPI 方式配置(推荐,对代码无侵入性)

  1. Attributes

    在要导入导出的属性上设置 ColumnAttribute 来自定义导出的列名称或排序或忽略

    添加 SheetAttribute 来设置导出的excel sheet名称等

    for example:

    1. public class TestEntity
    2. {
    3. [Column("Id")]
    4. public int PKID { get; set; }
    5. [Column("Bill Title")]
    6. public string BillTitle { get; set; }
    7. [Column("Bill Details")]
    8. public string BillDetails { get; set; }
    9. [Column("CreatedBy")]
    10. public string CreatedBy { get; set; }
    11. [Column("CreatedTime")]
    12. public DateTime CreatedTime { get; set; }
    13. }
    14. public class TestEntity1
    15. {
    16. [Column("Username")]
    17. public string Username { get; set; }
    18. [Column(IsIgnored = true)]
    19. public string PasswordHash { get; set; }
    20. [Column("Amount")]
    21. public decimal Amount { get; set; } = 1000M;
    22. [Column("WechatOpenId")]
    23. public string WechatOpenId { get; set; }
    24. [Column("IsActive")]
    25. public bool IsActive { get; set; }
    26. }
  2. FluentApi (Recommend)

    1. var setting = ExcelHelper.SettingFor<TestEntity>();
    2. // ExcelSetting
    3. setting.HasAuthor("WeihanLi")
    4. .HasTitle("WeihanLi.Npoi test")
    5. .HasDescription("")
    6. .HasSubject("");
    7. setting.HasSheetConfiguration(0, "System Settings");
    8. setting.HasFilter(0, 1)
    9. .HasFreezePane(0, 1, 2, 1);
    10. setting.Property(_ => _.SettingId)
    11. .HasColumnIndex(0);
    12. setting.Property(_ => _.SettingName)
    13. .HasColumnTitle("SettingName")
    14. .HasColumnIndex(1);
    15. setting.Property(_ => _.DisplayName)
    16. .HasColumnFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}")
    17. .HasColumnTitle("DisplayName")
    18. .HasColumnIndex(2);
    19. setting.Property(_ => _.SettingValue)
    20. .HasColumnTitle("SettingValue")
    21. .HasColumnIndex(3);
    22. setting.Property(_ => _.CreatedTime)
    23. .HasColumnTitle("CreatedTime")
    24. .HasColumnIndex(5)
    25. .HasColumnFormatter("yyyy-MM-dd HH:mm:ss");
    26. setting.Property(_ => _.CreatedBy)
    27. .HasColumnIndex(4)
    28. .HasColumnTitle("CreatedBy");
    29. setting.Property(_ => _.UpdatedBy).Ignored();
    30. setting.Property(_ => _.UpdatedTime).Ignored();
    31. setting.Property(_ => _.PKID).Ignored();

More

想要更多自定义选项,参考示例项目,或者给我提 issue

Contact

如果使用过程中有遇到什么问题,欢迎与我联系。

Contact me: weihanli@oulook.com

让 .NET 更方便的导入导出 Excel的更多相关文章

  1. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  2. C#用Infragistics 导入导出Excel(一)

    最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...

  3. C#用Infragistics 导入导出Excel

    最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...

  4. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  5. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  6. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  7. php中导入导出excel的原理

    在php中我们要经常导入导出excel文件,方便后台管理.那么php导入和导出excel的原理到底是什么呢?excel分为两大版本excel2007(后缀.xlsx).excel2003(后缀.xls ...

  8. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  9. .NET导入导出Excel

    若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...

随机推荐

  1. Python 简单实现数学四则运算

    GitHub地址:https://github.com/compassblog/PythonExercise 一.题目描述 (1)能自动生成小学四则运算题目: (2)能支持真分数的四则运算: 二.实现 ...

  2. git merge 撤销与git 回滚

    git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...

  3. mysql读写分离总结

    随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应用于很多大型网站,这个技 ...

  4. 网络编程之非阻塞connect编写

    一.connect非阻塞编写 TCP连接的建立涉及到一个三次握手的过程,且socket中connect函数需要一直等到客户接收到对于自己的SYN的ACK为止才返回, 这意味着每 个connect函数总 ...

  5. 深入理解SpringCloud之分布式配置

    Spring Cloud Config Server能够统一管理配置,我们绝大多数情况都是基于git或者svn作为其配置仓库,其实SpringCloud还可以把数据库作为配置仓库,今天我们就来了解一下 ...

  6. nginx 开启 停止 重启

    Nginx的启动.停止与重启 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sb ...

  7. JDBC连接MySQL数据库基础

    主要内容 MySQL的基本操作和基本SQL语法 使用JDBC进行MySQL数据库的开发 使用DriverManager.Connection.PreparedStatement.ResultSet对数 ...

  8. I/O-----字符输出流

    package io.day04; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileR ...

  9. error.go源码笔记

    ] {     case errorCodeConnFailed:         return ErrConnectionFailed(err)     case errorCodeHttpServ ...

  10. context.go

    package nsqd type context struct {     nsqd *NSQD }