让 .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 方式配置(推荐,对代码无侵入性)

1. 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; }	
}

2. 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

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

Contact

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

Contact me: weihanli@oulook.com

640?wx_fmt=jpeg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值