BestPractice-最佳实践
一些方便好用的 "最佳实践"
读取/导入
Excel 表格数据
Field0 | Field1 | Field2 | Field3 |
---|---|---|---|
233 | 23 | Male | 233.33 |
1122 | 12 | Female | 123.23 |
... | ... | ... | ... |
危险
表格必须要有一个一行的表头,不然无法正常导入
简单使用
备注
最简单的使用方式, 实体定义之后只需一行代码即可完成
根据属性(Property)读取
信息
代码中定义的数据实体
public class ExcelTestDto
{
public string Field0 { get; set; }
public int Field1 { get; set; }
public string Field2 { get; set; }
public double Field3 { get; set; }
}
IEnumerable<ExcelTestDto> entitysFromPath = await ReadConfig<ExcelTestDto>.ExcelToEntityAsync("******.xlsx");
IEnumerable<ExcelTestDto> entitysFromStream = await ReadConfig<ExcelTestDto>.ExcelToEntityAsync(stream);
// OR
IEnumerable<ExcelTestDto> entitysFromPath = await ExcelReadTool.ExcelToEntityAsync<ExcelTestDto>("******.xlsx");
IEnumerable<ExcelTestDto> entitysFromStream = await ExcelReadTool.ExcelToEntityAsync<ExcelTestDto>(stream);
提示
不需要额外配置, 直接传入 Excel 文件 的路径或流即可
根据注解(Attribute)读取
信息
代码中定义的数据实体
public class ExcelTestDto
{
[ExcelRead("Field0")]
public string Name { get; set; }
[ExcelRead("Field1")]
public int Age { get; set; }
[ExcelRead("Field2")]
public string Gender { get; set; }
[ExcelRead("Field3")]
public double Height { get; set; }
}
IEnumerable<ExcelTestDto> entitysFromPath = await ReadConfig<ExcelTestDto>.ExcelToEntityAsync("******.xlsx");
IEnumerable<ExcelTestDto> entitysFromStream = await ReadConfig<ExcelTestDto>.ExcelToEntityAsync(stream);
// OR
IEnumerable<ExcelTestDto> entitysFromPath = await ExcelReadTool.ExcelToEntityAsync<ExcelTestDto>("******.xlsx");
IEnumerable<ExcelTestDto> entitysFromStream = await ExcelReadTool.ExcelToEntityAsync<ExcelTestDto>(stream);
提示
不需要额外配置, 直接传入 Excel 文件 的文件或流即可
与上方使用属性读取的代码相同, 自动优先使用注解读取, 若无注解, 则使用属性
自定义读取配置
"简单使用是有极限的!"
"我从短暂的撸代码生涯中学到一件事......"
"越是想要搞骚操作, 就会发现简单使用适用范围不够......"
"所以要自定义读取配置"
var config = new ReadConfig<ExcelTestDto>()
.Add("Field0", item => item.Field0, item => { return item; })
.Add("Field1", item => item.Field1)
.Add("Field2", item => item.Field2, item => item == "Male" ? "男" : "女")
.Add("Field3", item => item.Field3)
;
提示
添加配置时基本上是按照 表头--属性--委托 这样传参
委托全是以 string
作为参数,返回值类型需要与属性一致
IEnumerable<ExcelTestDto> entitys = await config.ToEntityAsync("******.xlsx");
IEnumerable<ExcelTestDto> entitys = await config.ToEntityAsync(stream);
自定义-AddInit
有的时候可能需要在所有数据读完之后做个初始化或者其 他什么计算操作
这时就可以使用 AddInit
var config = new ReadConfig<ExcelTestDto>()
.Add("Field0", item => item.Field0, item => { return item; })
.Add("Field1", item => item.Field1)
.Add("Field2", item => item.Field2, item => item == "Male" ? "男" : "女")
.Add("Field3", item => item.Field3)
.AddInit(item =>
{
item.Field2 += $" {item.Field1} 岁";
return item;
})
;
全使用字符串进行配置
可以使用属性名称字符串代替属性,有时可以简化部分代码
var config = new ReadConfig<ExcelTestDto>()
.Add("Field0", "Field0")
.Add("Field1", "Field1")
.Add("Field2", "Field2")
.Add("Field3", "Field3")
;
提示
如果有把配置存入数据库的需要,这边的方式就非常有用了
可以遍历配置,然后添加
// 如果从数据库里读到了配置集合
foreach (var (field, prop) in collection)
config.Add(field, prop);
导出
简单使用
备注
最简单的使用方式, 实体定义之后只需一行代码即可完成
根据属性(Property)导出
信息
代码中定义的数据实体
public class ExcelTestDto
{
public string Field0 { get; set; }
public int Field1 { get; set; }
public string Field2 { get; set; }
public double Field3 { get; set; }
}
备注
使用方式基本上和上方的导入相同
IEnumerable<ExcelTestDto> exportData = new[] {
new ExcelTestDto{Field0="Name-1",Field1=1,Field2="Male",Field3= 1},
new ExcelTestDto{Field0="Name-2",Field1=2,Field2="Male",Field3= 2},
new ExcelTestDto{Field0="Name-3",Field1=3,Field2="Male",Field3= 3},
new ExcelTestDto{Field0="Name-4",Field1=4,Field2="Male",Field3= 4},
new ExcelTestDto{Field0="Name-5",Field1=5,Field2="Male",Field3= 5},
new ExcelTestDto{Field0="Name-6",Field1=6,Field2="Male",Field3= 6},
new ExcelTestDto{Field0="Name-7",Field1=7,Field2="Male",Field3= 7},
new ExcelTestDto{Field0="Name-8",Field1=8,Field2="Male",Field3= 8},
new ExcelTestDto{Field0="Name-9",Field1=9,Field2="Male",Field3= 9},
new ExcelTestDto{Field0="Name-10",Field1=10,Field2="Male",Field3= 10}
};
await ExportConfig<ExcelTestDto>.DataExportAsync(filePath, exportData);
根据注解(Attribute)读取
信息
代码中定义的数据实体
public class ExcelTestDto
{
[ExcelRead("Field0")]
public string Name { get; set; }
[ExcelRead("Field1")]
public int Age { get; set; }
[ExcelRead("Field2")]
public string Gender { get; set; }
[ExcelRead("Field3")]
public double Height { get; set; }
}