小Q的博客

  • 首页
  • net编程
    • 产品和框架
    • 开发实例
    • 经验技巧
    • 开源组件
  • wp独立站
  • 自媒体
  • 日记本
  • 工具箱
每个程序员,都应该有一个自己的博客站
  1. 首页
  2. net编程
  3. 开源组件
  4. 正文

net中c#使用ExcelMapper组件,高效读写Excel文件

2022年12月20日 434点热度 0人点赞 0条评论

目录

  • 前言
  • 简介
  • 核心功能
  • 如何使用
    • 使用特性映射到属性
    • 使用列索引映射到属性
    • 通过代码配置映射
    • 动态类型支持
    • 写入 Excel 文件
    • JSON 支持
  • 项目地址

前言

作为一个后端开发人员,工作中处理 Excel 的场景有很多,本文介绍了一个在 C# 中高效读写 Excel 的组件,可以极大的提升效率。

简介

ExcelMapper

是一个基于 MIT 协议的开源组件,通过操作 C# 中的数据模型来进行 Excel 的读取和写入。

它提供了非常简洁的 API,甚至可以通过一行代码读取或写入 Excel 数据。

核心功能

  • 读取和写入 Excel 文件
  • 支持 xls 和 xlsx 格式。
  • 通过约定、属性或方法调用把 Excel 列映射到 C# 的对象属性。
  • 读取文件后,支持修改保存。

如何使用

首先,使用 Nuget 搜索并安装 ExcelMapper 到项目中。

接下来,使用下面的代码,读取 products Excel 文件,非常简洁。

var products = new ExcelMapper("products.xlsx").Fetch<Product>();

 

当然,上面需要 Excel 文件中包含标题行,它会从第一个 Sheet 中读取数据,并且标题名称要和对象的属性名称相等(这里忽略大小写)。

使用特性映射到属性

下面的实体类中,使用了 Column 特性映射 Excel 中的标题名到 C# 中对象的属性。

public class Product
{
  [Column("名称")]
  public string Name { get; set; }
  
  public int NumberInStock { get; set; }
    
  [Column("价格")]
  public decimal Price { get; set; }
}

 

使用列索引映射到属性

当 Excel 数据中没有标题时,可以使用索引映射的方式,如下

var excelMapper = new ExcelMapper() { HeaderRow = false };

var products = await excelMapper.FetchAsync<Product>("products.xlsx"); 

public class Product
{
    [Column(1)]
    public string? Name { get; set; }

    [Column(Letter = "C")]
    public int NumberInStock { get; set; }
    [Column(4)]
    public decimal Price { get; set; }
}

 

这里的索引支持数字 1,2,3,4,也支持 Excel 对应的 A, B, C, D。

通过代码配置映射

除了在实体类上加特性的方式,ExcelMapper 还支持使用代码的方式手动映射,如下

var excel = new ExcelMapper("products.xls");
excel.AddMapping<Product>("Number", p => p.NumberInStock);
excel.AddMapping<Product>(1, p => p.NumberInStock);
excel.AddMapping(typeof(Product), "Number", "NumberInStock");
excel.AddMapping(typeof(Product), ExcelMapper.LetterToIndex("A"), "NumberInStock");

 

动态类型支持

你可以不定义实体类,直接使用 dynamic 类型获取数据,如下

var products = new ExcelMapper("products.xlsx").Fetch(); // -> IEnumerable<dynamic>
products.First().Price += 1.0;

 

写入 Excel 文件

写入数据也非常简单,调用 Save 方法并传入对象即可,如下

var products = new List<Product>
{
    new Product { Name = "Nudossi", NumberInStock = 60, Price = 1.99m },
    new Product { Name = "Halloren", NumberInStock = 33, Price = 2.99m },
    new Product { Name = "Filinchen", NumberInStock = 100, Price = 0.99m },
};

var excelMapper = new ExcelMapper();

excelMapper.Save("products.xlsx", products, "Products");

await excelMapper.SaveAsync("products.xlsx", products, "Products");

 

JSON 支持

你可以非常方便的把 Excel 中的数据映射到 Json 类型中,通过使用 Json 特性或者 AsJson 方法,如下

public class ProductJson
{
    [Json]
    public Product Product { get; set; }
}
// or
var excel = new ExcelMapper("products.xls");
excel.AddMapping<ProductJson>("Product", p => p.Product).AsJson();

 

如果你在寻找在 C# 中操作 Excel 的工具,绝对可以尝试下高效的ExcelMapper

项目地址

https://github.com/mganss/ExcelMapper

标签: c#教程 ExcelMapper net教程
最后更新:2022年12月20日

小Q

80后中年不油腻大叔,喜欢编写代码、打羽毛球、做木制玩具。目前定居浙江杭州

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 小Q的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备2022019157号-2