说明
本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出.
主要步骤
1.安装包Magicodes.IE.Csv
Install-Package Magicodes.IE.Csv
2.使用Magicodes.IE.Csv导出Csv
通过如下代码片段我们将导出的内容通过相应的特性做出相应的处理.
ExporterHeaderAttribute
DisplayName:显示名称
Format:格式化
IsIgnore:是否忽略
public class ExportTestDataWithAttrs
{
[ExporterHeader(DisplayName = "加粗文本", IsBold = true)]
public string Text { get; set; }
[ExporterHeader(DisplayName = "普通文本")] public string Text2 { get; set; }
[ExporterHeader(DisplayName = "忽略", IsIgnore = true)]
public string Text3 { get; set; }
[ExporterHeader(DisplayName = "数值", Format = "#,##0")]
public decimal Number { get; set; }
[ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
public string Name { get; set; }
/// <summary>
/// 时间测试
/// </summary>
[ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]
public DateTime Time1 { get; set; }
/// <summary>
/// 时间测试
/// </summary>
[ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]
public DateTime? Time2 { get; set; }
public DateTime Time3 { get; set; }
public DateTime Time4 { get; set; }
/// <summary>
/// 长数值测试
/// </summary>
[ExporterHeader(DisplayName = "长数值", Format = "#,##0")]
public long LongNo { get; set; }
}
通过DTO导出
public async Task ExportHeaderAsByteArray_Test()
{
IExporter exporter = new CsvExporter();
var filePath = GetTestFilePath($"{nameof(ExportHeaderAsByteArray_Test)}.csv");
DeleteFile(filePath);
var result = await exporter.ExportHeaderAsByteArray(GenFu.GenFu.New<ExportTestDataWithAttrs>());
}
3.使用Magicodes.IE.Csv导入Csv
对于csv导入我们可以通过,ImporterHeader Name属性去对应我们的Dto属性.并且可以通过ValueMapping对枚举类型进行相关的映射,并向我们返回相对应的值
public async Task StudentInfoImporter_Test()
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "学生基础数据导入.csv");
var import = await Importer.Import<ImportStudentDto>(filePath);
}
/// <summary>
/// 导入学生数据Dto
/// </summary>
public class ImportStudentDto
{
/// <summary>
/// 序号
/// </summary>
[ImporterHeader(Name = "序号")]
public long SerialNumber { get; set; }
/// <summary>
/// 学籍号
/// </summary>
[ImporterHeader(Name = "学籍号")]
public string StudentCode { get; set; }
/// <summary>
/// 姓名
/// </summary>
[ImporterHeader(Name = "姓名")]
public string Name { get; set; }
/// <summary>
/// 身份证号码
/// </summary>
[ImporterHeader(Name = "身份证号")]
public string IdCard { get; set; }
/// <summary>
/// 性别
/// </summary>
[ImporterHeader(Name = "性别")]
[ValueMapping("男", 0)]
[ValueMapping("女", 1)]
public Genders Gender { get; set; }
/// <summary>
/// 家庭地址
/// </summary>
[ImporterHeader(Name = "家庭住址")]
public string Address { get; set; }
/// <summary>
/// 家长姓名
/// </summary>
[ImporterHeader(Name = "家长姓名")]
public string Guardian { get; set; }
/// <summary>
/// 家长联系电话
/// </summary>
[ImporterHeader(Name = "家长联系电话")]
public string GuardianPhone { get; set; }
/// <summary>
/// 学号
/// </summary>
[ImporterHeader(Name = "学号")]
public string StudentNub { get; set; }
/// <summary>
/// 宿舍号
/// </summary>
[ImporterHeader(Name = "宿舍号")]
public string DormitoryNo { get; set; }
/// <summary>
/// QQ
/// </summary>
[ImporterHeader(Name = "QQ号")]
public string QQ { get; set; }
/// <summary>
/// 民族
/// </summary>
[ImporterHeader(Name = "民族")]
public string Nation { get; set; }
/// <summary>
/// 户口性质
/// </summary>
[ImporterHeader(Name = "户口性质")]
public string HouseholdType { get; set; }
/// <summary>
/// 联系电话
/// </summary>
[ImporterHeader(Name = "学生联系电话")]
public string Phone { get; set; }
/// <summary>
/// 状态
/// 测试可为空的枚举类型
/// </summary>
[ImporterHeader(Name = "状态")]
public StudentStatus? Status { get; set; }
/// <summary>
/// 备注
/// </summary>
[ImporterHeader(Name = "备注")]
public string Remark { get; set; }
/// <summary>
/// 是否住校(宿舍)
/// </summary>
[ImporterHeader(IsIgnore = true)]
public bool? IsBoarding { get; set; }
/// <summary>
/// 所属班级id
/// </summary>
[ImporterHeader(IsIgnore = true)]
public Guid ClassId { get; set; }
/// <summary>
/// 学校Id
/// </summary>
[ImporterHeader(IsIgnore = true)]
public Guid? SchoolId { get; set; }
/// <summary>
/// 校区Id
/// </summary>
[ImporterHeader(IsIgnore = true)]
public Guid? CampusId { get; set; }
/// <summary>
/// 专业Id
/// </summary>
[ImporterHeader(IsIgnore = true)]
public Guid? MajorsId { get; set; }
/// <summary>
/// 年级Id
/// </summary>
[ImporterHeader(IsIgnore = true)]
public Guid? GradeId { get; set; }
}
Reference
https://github.com/dotnetcore/Magicodes.IE
层出不穷的新技术对程序员来说既是挑战也是机遇,固守自己的一亩三分地迟早落于他人,是时候跳出来看看行业内的发展新趋势,参与2020 DAMS中国数据智能管理峰会是个不错的选择,其中前沿技术议题包括:
《当5G遇上金融,看电信甜橙金融如何创新?》中国电信甜橙金融技术创新中心总经理 张小虎
《智能制造的数字化基础的设计与演进》长城汽车集团云计算总监 张小斌
《平安银行“传统+互联网”混合CMDB及运营中台实践》平安银行运营开发负责人 徐大蔚
《中信银行的DevOps实践》中信银行DevOps实施牵头人 李红涛
8月7日,一起在上海洞悉技术发展新趋势,逆袭码农人生吧!
转载是一种动力 分享是一种美德
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文档官网:docs.xin-lai.com
QQ群:
编程交流群<85318032>
产品交流群<897857351>