步骤详解:创建Excel导入工具类实例
177 浏览量
更新于2024-09-01
收藏 60KB PDF 举报
本文档详细介绍了如何创建一个Excel导入工具类,以便在程序中高效地读取和处理Excel文件中的数据。主要分为两个步骤:
步骤一:创建实体属性标记
首先,定义一个名为`CellAttribute`的自定义属性类,它继承自.NET框架的`Attribute`类。这个类用于标记Excel工作表中的单元格,提供列名(`DisplayName`)和类型处理(`TypeHandler`)的配置。`CellAttribute`类的构造函数接收显示名称和可选的类型处理器,用于指定特定列的数据处理方式。例如:
```csharp
public class CellAttribute : Attribute
{
public string DisplayName { get; set; }
public Type TypeHandler { get; set; }
public CellAttribute(string displayName, Type handler = null)
{
DisplayName = displayName;
Handler = handler;
}
}
```
通过这种方式,开发人员可以明确每个Excel列与对象属性之间的关系,并指定数据解析规则。
步骤二:创建通用处理方法
接下来,创建一个泛型类`XlsFileHandler<T>`,其中`T`是一个类型参数,表示待导入的数据实体类型,且必须是新实例化的(`where T : new()`)。该类包含以下关键部分:
1. `Path` 和相关字典变量,用于存储文件路径以及列属性映射。
2. 构造函数接受Excel文件路径,并初始化列属性和属性字典。
3. `CreateMappers`方法是核心部分,遍历数据实体`T`的所有属性,获取`CellAttribute`类型的自定义注解。对于每个属性,它会将属性名添加到`_cellAttributes`字典中,作为键,对应的`CellAttribute`对象作为值。同时,还会将属性名与属性名关联起来,形成`_propDictionary`,用于后续的数据映射。
具体实现如下:
```csharp
public class XlsFileHandler<T> where T : new()
{
private readonly string _path;
private readonly Dictionary<string, CellAttribute> _cellAttributes;
private readonly Dictionary<string, string> _propDictionary;
public XlsFileHandler(string path)
{
_path = path;
_cellAttributes = new Dictionary<string, CellAttribute>();
_propDictionary = new Dictionary<string, string>();
CreateMappers();
}
private void CreateMappers()
{
foreach (var prop in typeof(T).GetProperties())
{
foreach (CellAttribute cellMapper in prop.GetCustomAttributes(false).OfType<CellAttribute>())
{
// 添加列属性映射
_cellAttributes.Add(prop.Name, cellMapper);
// 添加属性名到属性字典
_propDictionary.Add(prop.Name, cellMapper.DisplayName);
}
}
}
}
```
通过这个工具类,你可以方便地处理不同Excel文件中的数据,只需要传入文件路径,根据数据实体类型定义的`CellAttribute`即可自动完成数据的读取和映射。这大大简化了Excel数据导入的过程,并提高了代码的复用性和可维护性。
2020-03-31 上传
2018-12-18 上传
点击了解资源详情
2023-05-25 上传
2022-01-04 上传
2022-11-23 上传
2014-09-12 上传
2013-12-30 上传
2014-05-28 上传
weixin_38606466
- 粉丝: 11
- 资源: 871
最新资源
- upptime:我的外部监控工具
- HTMLprocessor:HTML 处理和指标提取
- Draft Wed Aug 15 15:32:42 CST 2018-数据集
- Python库 | datatools_mikdowd-0.0.5-py3-none-any.whl
- 基于 C++大地测量学之坐标转化及坐标系转换
- modcopy-开源
- pyg_lib-0.3.0+pt20cpu-cp311-cp311-linux_x86_64whl.zip
- intern_szut:intern_szut网站
- 森兰变频器上位机控制软件SlMonitorV2.1.zip
- Crawling_Project:使用python,BeautifulSoup
- ParkinsonsPredictor:使用两种不同的分类策略来尝试预测某人是否患有帕金森病
- BPMVue:BPM的Vue
- qiyemingpian:nodeJS+express+mysql后端开发教程-企业名片小程序后端开发
- 147. 2019抖音数据报告.rar
- lesson-1
- racket2nix:取得一个info.rkt文件,生成一个info.nix文件