多Sheet导入教程说明

本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入。

要点

  • 多个相同格式的Sheet数据导入

  • 多个不同格式的Sheet数据导入

主要步骤

1. 多个相同格式的Sheet数据导入

1.1 创建导入Sheet的Dto

主要代码如下所示:

  • 学生数据Dto

 /// <summary>/// 导入学生数据Dto/// IsLabelingError:是否标注数据错误/// </summary>
[ExcelImporter(IsLabelingError = true)]public class ImportStudentDto
{/// <summary>///     序号/// </summary>[ImporterHeader(Name = "序号")]public long SerialNumber { get; set; }/// <summary>///     学籍号/// </summary>[ImporterHeader(Name = "学籍号", IsAllowRepeat = false)][MaxLength(30, ErrorMessage = "学籍号字数超出最大限制,请修改!")]public string StudentCode { get; set; }/// <summary>///     姓名/// </summary>[ImporterHeader(Name = "姓名")][Required(ErrorMessage = "学生姓名不能为空")][MaxLength(50, ErrorMessage = "名称字数超出最大限制,请修改!")]public string Name { get; set; }/// <summary>///     身份证号码/// </summary>[ImporterHeader(Name = "身份证号", IsAllowRepeat = false)][Required(ErrorMessage = "身份证号不能为空")][MaxLength(18, ErrorMessage = "身份证字数超出最大限制,请修改!")]public string IdCard { get; set; }/// <summary>///     性别/// </summary>[ImporterHeader(Name = "性别")][Required(ErrorMessage = "性别不能为空")][ValueMapping("男", 0)][ValueMapping("女", 1)]public Genders Gender { get; set; }/// <summary>///     家庭地址/// </summary>[ImporterHeader(Name = "家庭住址")][Required(ErrorMessage = "家庭地址不能为空")][MaxLength(200, ErrorMessage = "家庭地址字数超出最大限制,请修改!")]public string Address { get; set; }/// <summary>///     家长姓名/// </summary>[ImporterHeader(Name = "家长姓名")][Required(ErrorMessage = "家长姓名不能为空")][MaxLength(50, ErrorMessage = "家长姓名数超出最大限制,请修改!")]public string Guardian { get; set; }/// <summary>///     家长联系电话/// </summary>[ImporterHeader(Name = "家长联系电话")][MaxLength(20, ErrorMessage = "家长联系电话字数超出最大限制,请修改!")]public string GuardianPhone { get; set; }/// <summary>///     学号/// </summary>[ImporterHeader(Name = "学号")][MaxLength(30, ErrorMessage = "学号字数超出最大限制,请修改!")]public string StudentNub { get; set; }/// <summary>///     宿舍号/// </summary>[ImporterHeader(Name = "宿舍号")][MaxLength(20, ErrorMessage = "宿舍号字数超出最大限制,请修改!")]public string DormitoryNo { get; set; }/// <summary>///     QQ/// </summary>[ImporterHeader(Name = "QQ号")][MaxLength(30, ErrorMessage = "QQ号字数超出最大限制,请修改!")]public string QQ { get; set; }/// <summary>///     民族/// </summary>[ImporterHeader(Name = "民族")][MaxLength(2, ErrorMessage = "民族字数超出最大限制,请修改!")]public string Nation { get; set; }/// <summary>///     户口性质/// </summary>[ImporterHeader(Name = "户口性质")][MaxLength(10, ErrorMessage = "户口性质字数超出最大限制,请修改!")]public string HouseholdType { get; set; }/// <summary>///     联系电话/// </summary>[ImporterHeader(Name = "学生联系电话")][MaxLength(20, ErrorMessage = "手机号码字数超出最大限制,请修改!")]public string Phone { get; set; }/// <summary>///     状态///     测试可为空的枚举类型/// </summary>[ImporterHeader(Name = "状态")]public StudentStatus? Status { get; set; }/// <summary>///     备注/// </summary>[ImporterHeader(Name = "备注")][MaxLength(200, ErrorMessage = "备注字数超出最大限制,请修改!")]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; }
}

1.2 创建导Excel入Dto

主要代码如下所示:

  • 学生数据Dto

 public class ImportClassStudentDto
{[ExcelImporter(SheetName = "1班导入数据")]public ImportStudentDto Class1Students { get; set; }[ExcelImporter(SheetName = "2班导入数据")]public ImportStudentDto Class2Students { get; set; }}

如上述代码所示,我们定义了班级学生数据Dto,主要注意事项如下:

  1. Excel的Dto类上面不用导入相关的加特性。

  2. Excel的Dto类里面的属性未Sheet的Dto类型,ExcelImporter特性离的SheetName参数来设置具体某一个Sheet名。

1.3 Excel模板

注意:Excel里的多个Sheet列名必须一致(对应同一个Sheet的Dto类型)

模板目录:src\Magicodes.ExporterAndImporter.Tests\TestFiles\Import\班级学生基础数据导入.xlsx

第一个Sheet:

第二个Sheet:

1.4 导入代码

IExcelImporter Importer = new ExcelImporter();var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "班级学生基础数据导入.xlsx");//获取到的导入结果为一个字典类型,Key为Sheet名,Value为Sheet对应的数据
var importDic = await Importer.ImportSameSheets<ImportClassStudentDto, ImportStudentDto>(filePath);//遍历字典,获取每个Sheet的数据
foreach (var item in importDic)
{var import = item.Value;//导入的Sheet数据var studentList = import.Data.ToList();
}

2. 多个不同格式的Sheet数据导入

2.1 创建导入Sheet的Dto

主要代码如下所示:

  • 学生数据Dto同上

  • 缴费日志数据Dto :

/// <summary>///     缴费日志导入Dto/// </summary>/// <autogeneratedoc />
[ExcelImporter(IsLabelingError = true)]public class ImportPaymentLogDto
{/// <summary>///     学生姓名/// </summary>[ImporterHeader(Name = "学生姓名")][Required(ErrorMessage = "学生姓名为必填项")][MaxLength(30, ErrorMessage = "学生姓名不能超过15位")]public string Name { get; set; }/// <summary>///     身份证号码/// </summary>[ImporterHeader(Name = "身份证号码")][Required(ErrorMessage = "身份证号码为必填项")][MaxLength(18, ErrorMessage = "身份证号码不能超过18位")][MinLength(18, ErrorMessage = "身份证号码不能小于18位")]public string IdCard { get; set; }/// <summary>///     缴费类型/// </summary>[ImporterHeader(Name = "缴费类型")][Required(ErrorMessage = "缴费类型为必填项")]public string CostType { get; set; }/// <summary>///     金额/// </summary>[ImporterHeader(Name = "金额")][Range(0.01, 1000000, ErrorMessage = "收费金额区间为1~100万")][Required(ErrorMessage = "金额为必填项")]public decimal Amount { get; set; }/// <summary>///     缴费日期/// </summary>[ImporterHeader(Name = "缴费日期")][MaxLength(8, ErrorMessage = "缴费日期不能超过8位")][RegularExpression("\\d{6,8}", ErrorMessage = "缴费日期只能输入6到8位数字例如201908/20190815")]public string PayDate { get; set; }/// <summary>///     收据编号///     多个使用逗号分隔,仅线下收据/// </summary>[ImporterHeader(Name = "收据编号")][MaxLength(200, ErrorMessage = "收据编号不能超过200位")]public string ReceiptCodes { get; set; }/// <summary>///     备注/// </summary>[ImporterHeader(Name = "备注")][MaxLength(500, ErrorMessage = "备注不能超过500位")]public string Remarks { get; set; }/// <summary>///     创建时间/// </summary>[ImporterHeader(IsIgnore = true)]public DateTime? CreationTime { get; set; }/// <summary>///     收费项目id/// </summary>[ImporterHeader(IsIgnore = true)]public int? ChargeProjectId { get; set; }/// <summary>///     班级Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? ClassId { get; set; }/// <summary>///     班级名称/// </summary>[ImporterHeader(IsIgnore = true)]public string ClassName { get; set; }/// <summary>///     年级Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? GradeId { get; set; }/// <summary>///     年级信息/// </summary>[ImporterHeader(IsIgnore = true)]public string GradeName { get; set; }/// <summary>///     专业Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? MajorId { get; set; }/// <summary>///     专业信息/// </summary>[ImporterHeader(IsIgnore = true)]public string MajorName { get; set; }/// <summary>///     校区Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? CampusId { get; set; }/// <summary>///     校区名称/// </summary>[ImporterHeader(IsIgnore = true)]public string CampusName { get; set; }/// <summary>///     学校Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? SchoolId { get; set; }/// <summary>///     学校信息/// </summary>[ImporterHeader(IsIgnore = true)]public string SchoolName { get; set; }
}

2.2 创建导Excel入Dto

主要代码如下所示:

  • 班级学生基础数据及缴费流水数据Dto

 public  class ImportStudentAndPaymentLogDto
{[ExcelImporter(SheetName = "1班导入数据")]public ImportStudentDto Class1Students { get; set; }[ExcelImporter(SheetName = "缴费数据")]public ImportPaymentLogDto Class2Students { get; set; }
}

2.3 Excel模板

模板目录:src\Magicodes.ExporterAndImporter.Tests\TestFiles\Import\学生基础数据及缴费流水号导入.xlsx

学生基础数据Sheet:

缴费流水号Sheet:

2.4 导入代码

IExcelImporter Importer = new ExcelImporter();var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "学生基础数据及缴费流水号导入.xlsx");//获取到的导入结果为一个字典类型,Key为Sheet名,Value为Sheet对应的数据
var importDic = await Importer.ImportMultipleSheet<ImportStudentAndPaymentLogDto>(filePath);//遍历字典,获取每个Sheet的数据
foreach (var item in importDic)
{var import = item.Value;//导入的Sheet数据,if (item.Key == "1班导入数据"){//多个不同类型的Sheet返回的值为object,需要进行类型转换ImportStudentDto dto = (ImportStudentDto) import.Data.ElementAt(0);}if (item.Key == "缴费数据"){ImportPaymentLogDto dto = (ImportPaymentLogDto)import.Data.ElementAt(0);}
}

Reference

https://github.com/dotnetcore/Magicodes.IE

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文作者:tanyongzheng

文档官网:docs.xin-lai.com

QQ群:

编程交流群<85318032>

产品交流群<897857351>

开源导入导出库Magicodes.IE 多sheet导入教程相关推荐

  1. ASP.NET 开源导入导出库Magicodes.IE Docker中使用

    更新历史 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_Test".问题见(https:// ...

  2. ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

    基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...

  3. Excel导入导出工具类(多sheet、多表头、单元格下拉选择、根据列名匹配转为List)

    一.多sheet 通过配置动态生成多个工作表(sheet),自定义sheet的名称,如下效果图: 二.多表头 通过配置生成多表头,效果图如下: 主要核心代码: // 赋值后,执行合并单元格 log.t ...

  4. java maven导入导出_Java +EasyUI+SpringMvc实现Excle导入导出(上)

    标签: 前言 先介绍下项目的开发环境,采用java开发语言进行开发,前台UI使用的是EasyUI框架,接下来是SpringMvc与Ejb结合来开发,整个项目管理采用的是Maven管理,服务器用的是Jb ...

  5. java excel 导入导出_java中excel文件的导入和导出

    如有需要可以加我Q群[308742428]大家一起讨论技术,提供技术支持. 后面会不定时为大家更新文章,敬请期待. 前端上传excel文件到后台,后台接收后保存数据到数据库. 这里需要说明的一点是前端 ...

  6. python导入requests库_windows环境中python导入requests

    在windows7中装完python,如何导入requests库呢? Requests是一个基于Apache2协议开源的Python HTTP库,号称是"为人类准备的HTTP库". ...

  7. oracle导入导出还原,Oracle 备份 还原 数据库 导入导出

    导出 EXP USER/PASSWORD@ODBC FILE=C:\***.DMP ROWS=N //不保存数据: 导出 EXP USER/PASSWORD@ODBC FILE=C:\***.DMP  ...

  8. oracle数据如何导入pg库,【oracle数据库如何导入到pg库中】-其它论坛-ZOL中关村在线...

    使用squirrel的db copy功能:选择多个表 copy paste, 可以跨多种数据库(基本上可以支持jdbc连接的数据库都可以,我只试下oracle postgresql),不错,就是它了, ...

  9. Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库

    在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...

最新文章

  1. 第七章 Shell文本处理三剑客之sed
  2. pyBoard 基于MicroPython开发STM32FXX单片机
  3. 如何将Visio图形转换成EPS格式【mark from百度知道】
  4. Python 类的特性讲解
  5. CSS滤镜 【转载】
  6. 如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 试读版
  7. 【数据结构基础】-串-顺序结构的基本操作实现
  8. 单片机单口不可用或被占用_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...
  9. Java集合之一—HashMap
  10. POJ1068 Parencodings(模拟)
  11. python复习第一节
  12. 尝试做一个简单的文件系统
  13. LED灯具检验标准与方法
  14. Django框架零基础入门
  15. 毛绒产品计算机测配色,计算机测配色综述.doc
  16. 收集可用的关于英语单词api
  17. CSPS-S 模拟47
  18. 神探狄仁杰是一个Debug高手
  19. 什么是文件包含漏洞?文件包含漏洞分类!
  20. Copyright 与 Copyleft

热门文章

  1. Console-算法-递归算法示例
  2. IE6.0、IE7.0 、FireFox 在样式中的不同写法.doc
  3. Android动态赋权限,安卓6.0以上动态添加权限超简单模板
  4. java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
  5. 10以内数的组成分解图_大班数学教案《10以内数的组成》
  6. 缩点(有向图的强连通分量)学习笔记
  7. 详述 IntelliJ IDEA 插件的安装及使用方法
  8. Mac Ubuntu ----端口被占用
  9. WPF/MVVM 快速开发
  10. Linux服务器数据备份