让 .NET 更方便的导入导出 Excel
让 .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
IWorkbook workbook = ExcelHelper.LoadExcel("excelFilePath");
将 Excel 文件的第一个 sheet 里的内容转成 list 对象
List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");
将 Excel 文件的第一个 sheet 里的内容转成 DataTable 对象
DataTable dataTable = ExcelHelper.ToDataTable("excelFilePath");
将 list 对象导出到 Excel 字节数组
List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");
entityList.ToExcelBytes();
将 list 对象导出到 Excel 文件
List<TEntity> entityList = ExcelHelper.ToEntityList<TEntity>("excelFilePath");
entityList.ToExcelFile("excelFilePath");
自定义配置
默认的导入导出是按照属性名为导出的列名称的,如果不能满足或者想要自定义某些属性不导出或设置导出顺序,可以通过配置实现
提供了两种配置方式,一种是使用 Attribute 方式来配置,第二种是使用 FluentAPI 方式配置(推荐,对代码无侵入性)
Attributes
在要导入导出的属性上设置
ColumnAttribute
来自定义导出的列名称或排序或忽略添加
SheetAttribute
来设置导出的excel sheet名称等for example:
public class TestEntity
{
[Column("Id")]
public int PKID { get; set; } [Column("Bill Title")]
public string BillTitle { get; set; } [Column("Bill Details")]
public string BillDetails { get; set; } [Column("CreatedBy")]
public string CreatedBy { get; set; } [Column("CreatedTime")]
public DateTime CreatedTime { get; set; }
} public class TestEntity1
{
[Column("Username")]
public string Username { get; set; } [Column(IsIgnored = true)]
public string PasswordHash { get; set; } [Column("Amount")]
public decimal Amount { get; set; } = 1000M; [Column("WechatOpenId")]
public string WechatOpenId { get; set; } [Column("IsActive")]
public bool IsActive { get; set; }
}
FluentApi (Recommend)
var setting = ExcelHelper.SettingFor<TestEntity>();
// ExcelSetting
setting.HasAuthor("WeihanLi")
.HasTitle("WeihanLi.Npoi test")
.HasDescription("")
.HasSubject(""); setting.HasSheetConfiguration(0, "System Settings"); setting.HasFilter(0, 1)
.HasFreezePane(0, 1, 2, 1); setting.Property(_ => _.SettingId)
.HasColumnIndex(0); setting.Property(_ => _.SettingName)
.HasColumnTitle("SettingName")
.HasColumnIndex(1); setting.Property(_ => _.DisplayName)
.HasColumnFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}")
.HasColumnTitle("DisplayName")
.HasColumnIndex(2); setting.Property(_ => _.SettingValue)
.HasColumnTitle("SettingValue")
.HasColumnIndex(3); setting.Property(_ => _.CreatedTime)
.HasColumnTitle("CreatedTime")
.HasColumnIndex(5)
.HasColumnFormatter("yyyy-MM-dd HH:mm:ss"); setting.Property(_ => _.CreatedBy)
.HasColumnIndex(4)
.HasColumnTitle("CreatedBy"); setting.Property(_ => _.UpdatedBy).Ignored();
setting.Property(_ => _.UpdatedTime).Ignored();
setting.Property(_ => _.PKID).Ignored();
More
Contact
如果使用过程中有遇到什么问题,欢迎与我联系。
Contact me: weihanli@oulook.com
让 .NET 更方便的导入导出 Excel的更多相关文章
- 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 ...
- C#用Infragistics 导入导出Excel(一)
最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...
- C#用Infragistics 导入导出Excel
最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- thinkphp导入导出excel表单数据
在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- php中导入导出excel的原理
在php中我们要经常导入导出excel文件,方便后台管理.那么php导入和导出excel的原理到底是什么呢?excel分为两大版本excel2007(后缀.xlsx).excel2003(后缀.xls ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- .NET导入导出Excel
若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...
随机推荐
- tomcat启动报错:Address already in use: JVM_Bind
tomcat启动时出现Address already in use: JVM_Bind 的原因是因为端口被占用,有可能是因为多次启动tomcat或者启动了多个tomcat,或者是其他应用程序或者服务占 ...
- 基于.net的爬虫应用-DotnetSpider
最近应朋友的邀请,帮忙做了个简单的爬虫程序,要求不高,主要是方便对不同网站的爬取进行扩展,获取到想要的数据信息即可.当然,基于数据的后期分析功能是后话,以后的随笔我会逐步的介绍. 开源的爬虫框架比较多 ...
- jenkins中集成commander应用
jenkins中集成commander应用 jenkins 集成测试 promotion 最近参加公司的集成测试平台的开发,在开发中遇到了不少问题,两个星期的迭代也即将完成,在这也用这篇博客记录下开发 ...
- C语言 > 字符串和字符串函数
输入 gets() 函数 : 1.gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区. 2.可以用来输入带空格的字符串. 3.可以无限读取, ...
- C++之Binary Heap/Max Heap
#include <iostream> #include <time.h> #include <random> using namespace std; //Bin ...
- Linux时间子系统之二:Alarm Timer
一.前言 严格来讲Alarm Timer也算POSIX Timer一部分,包含两种类型CLOCK_REALTIME_ALARM和CLOCK_BOOTTIME_ALARM.分别是在CLOCK_REALT ...
- Ubuntu系统下安装CodeBlocks
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=616 1 添加CodeBlocks的软件仓库 sudo add-apt-repository ppa:damien- ...
- Spring Batch 专题
如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架 ...
- JSONUtils.toJSONString的一个坑
JSONUtils.toJSONString(null); //返回一个为"null"的字符串 这样会导致一个结果就是StringUtils.isBlank判断后,会为false ...
- Android开发环境的配置2017.05.27
关于配置Android开发环境请参考此链接:http://blog.chinaunix.net/uid-25434387-id-461933.html