多Sheet導入教程說明
本教程主要說明如何使用Magicodes.IE.Excel完成多個Sheet數(shù)據(jù)的Excel導入。
要點
主要步驟
1. 多個相同格式的Sheet數(shù)據(jù)導入
1.1 創(chuàng)建導入Sheet的Dto
主要代碼如下所示:
/// <summary>/// 導入學生數(shù)據(jù)Dto/// IsLabelingError:是否標注數(shù)據(jù)錯誤/// </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 = "學籍號字數(shù)超出最大限制,請修改!")]public string StudentCode { get; set; }/// <summary>/// 姓名/// </summary>[ImporterHeader(Name = "姓名")][Required(ErrorMessage = "學生姓名不能為空")][MaxLength(50, ErrorMessage = "名稱字數(shù)超出最大限制,請修改!")]public string Name { get; set; }/// <summary>/// 身份證號碼/// </summary>[ImporterHeader(Name = "身份證號", IsAllowRepeat = false)][Required(ErrorMessage = "身份證號不能為空")][MaxLength(18, ErrorMessage = "身份證字數(shù)超出最大限制,請修改!")]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 = "家庭地址字數(shù)超出最大限制,請修改!")]public string Address { get; set; }/// <summary>/// 家長姓名/// </summary>[ImporterHeader(Name = "家長姓名")][Required(ErrorMessage = "家長姓名不能為空")][MaxLength(50, ErrorMessage = "家長姓名數(shù)超出最大限制,請修改!")]public string Guardian { get; set; }/// <summary>/// 家長聯(lián)系電話/// </summary>[ImporterHeader(Name = "家長聯(lián)系電話")][MaxLength(20, ErrorMessage = "家長聯(lián)系電話字數(shù)超出最大限制,請修改!")]public string GuardianPhone { get; set; }/// <summary>/// 學號/// </summary>[ImporterHeader(Name = "學號")][MaxLength(30, ErrorMessage = "學號字數(shù)超出最大限制,請修改!")]public string StudentNub { get; set; }/// <summary>/// 宿舍號/// </summary>[ImporterHeader(Name = "宿舍號")][MaxLength(20, ErrorMessage = "宿舍號字數(shù)超出最大限制,請修改!")]public string DormitoryNo { get; set; }/// <summary>/// QQ/// </summary>[ImporterHeader(Name = "QQ號")][MaxLength(30, ErrorMessage = "QQ號字數(shù)超出最大限制,請修改!")]public string QQ { get; set; }/// <summary>/// 民族/// </summary>[ImporterHeader(Name = "民族")][MaxLength(2, ErrorMessage = "民族字數(shù)超出最大限制,請修改!")]public string Nation { get; set; }/// <summary>/// 戶口性質(zhì)/// </summary>[ImporterHeader(Name = "戶口性質(zhì)")][MaxLength(10, ErrorMessage = "戶口性質(zhì)字數(shù)超出最大限制,請修改!")]public string HouseholdType { get; set; }/// <summary>/// 聯(lián)系電話/// </summary>[ImporterHeader(Name = "學生聯(lián)系電話")][MaxLength(20, ErrorMessage = "手機號碼字數(shù)超出最大限制,請修改!")]public string Phone { get; set; }/// <summary>/// 狀態(tài)/// 測試可為空的枚舉類型/// </summary>[ImporterHeader(Name = "狀態(tài)")]public StudentStatus? Status { get; set; }/// <summary>/// 備注/// </summary>[ImporterHeader(Name = "備注")][MaxLength(200, ErrorMessage = "備注字數(shù)超出最大限制,請修改!")]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>/// 校區(qū)Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? CampusId { get; set; }/// <summary>/// 專業(yè)Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? MajorsId { get; set; }/// <summary>/// 年級Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? GradeId { get; set; }
}
1.2 創(chuàng)建導Excel入Dto
主要代碼如下所示:
public class ImportClassStudentDto
{[ExcelImporter(SheetName = "1班導入數(shù)據(jù)")]public ImportStudentDto Class1Students { get; set; }[ExcelImporter(SheetName = "2班導入數(shù)據(jù)")]public ImportStudentDto Class2Students { get; set; }}
如上述代碼所示,我們定義了班級學生數(shù)據(jù)Dto,主要注意事項如下:
Excel的Dto類上面不用導入相關(guān)的加特性。
Excel的Dto類里面的屬性未Sheet的Dto類型,ExcelImporter特性離的SheetName參數(shù)來設(shè)置具體某一個Sheet名。
1.3 Excel模板
注意:Excel里的多個Sheet列名必須一致(對應(yīng)同一個Sheet的Dto類型)
模板目錄:src\Magicodes.ExporterAndImporter.Tests\TestFiles\Import\班級學生基礎(chǔ)數(shù)據(jù)導入.xlsx
第一個Sheet:
第二個Sheet:
1.4 導入代碼
IExcelImporter Importer = new ExcelImporter();var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "班級學生基礎(chǔ)數(shù)據(jù)導入.xlsx");//獲取到的導入結(jié)果為一個字典類型,Key為Sheet名,Value為Sheet對應(yīng)的數(shù)據(jù)
var importDic = await Importer.ImportSameSheets<ImportClassStudentDto, ImportStudentDto>(filePath);//遍歷字典,獲取每個Sheet的數(shù)據(jù)
foreach (var item in importDic)
{var import = item.Value;//導入的Sheet數(shù)據(jù)var studentList = import.Data.ToList();
}
2. 多個不同格式的Sheet數(shù)據(jù)導入
2.1 創(chuàng)建導入Sheet的Dto
主要代碼如下所示:
學生數(shù)據(jù)Dto同上
繳費日志數(shù)據(jù)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 = "收費金額區(qū)間為1~100萬")][Required(ErrorMessage = "金額為必填項")]public decimal Amount { get; set; }/// <summary>/// 繳費日期/// </summary>[ImporterHeader(Name = "繳費日期")][MaxLength(8, ErrorMessage = "繳費日期不能超過8位")][RegularExpression("\\d{6,8}", ErrorMessage = "繳費日期只能輸入6到8位數(shù)字例如201908/20190815")]public string PayDate { get; set; }/// <summary>/// 收據(jù)編號/// 多個使用逗號分隔,僅線下收據(jù)/// </summary>[ImporterHeader(Name = "收據(jù)編號")][MaxLength(200, ErrorMessage = "收據(jù)編號不能超過200位")]public string ReceiptCodes { get; set; }/// <summary>/// 備注/// </summary>[ImporterHeader(Name = "備注")][MaxLength(500, ErrorMessage = "備注不能超過500位")]public string Remarks { get; set; }/// <summary>/// 創(chuàng)建時間/// </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>/// 專業(yè)Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? MajorId { get; set; }/// <summary>/// 專業(yè)信息/// </summary>[ImporterHeader(IsIgnore = true)]public string MajorName { get; set; }/// <summary>/// 校區(qū)Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? CampusId { get; set; }/// <summary>/// 校區(qū)名稱/// </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 創(chuàng)建導Excel入Dto
主要代碼如下所示:
public class ImportStudentAndPaymentLogDto
{[ExcelImporter(SheetName = "1班導入數(shù)據(jù)")]public ImportStudentDto Class1Students { get; set; }[ExcelImporter(SheetName = "繳費數(shù)據(jù)")]public ImportPaymentLogDto Class2Students { get; set; }
}
2.3 Excel模板
模板目錄:src\Magicodes.ExporterAndImporter.Tests\TestFiles\Import\學生基礎(chǔ)數(shù)據(jù)及繳費流水號導入.xlsx
學生基礎(chǔ)數(shù)據(jù)Sheet:
繳費流水號Sheet:
2.4 導入代碼
IExcelImporter Importer = new ExcelImporter();var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "學生基礎(chǔ)數(shù)據(jù)及繳費流水號導入.xlsx");//獲取到的導入結(jié)果為一個字典類型,Key為Sheet名,Value為Sheet對應(yīng)的數(shù)據(jù)
var importDic = await Importer.ImportMultipleSheet<ImportStudentAndPaymentLogDto>(filePath);//遍歷字典,獲取每個Sheet的數(shù)據(jù)
foreach (var item in importDic)
{var import = item.Value;//導入的Sheet數(shù)據(jù),if (item.Key == "1班導入數(shù)據(jù)"){//多個不同類型的Sheet返回的值為object,需要進行類型轉(zhuǎn)換ImportStudentDto dto = (ImportStudentDto) import.Data.ElementAt(0);}if (item.Key == "繳費數(shù)據(jù)"){ImportPaymentLogDto dto = (ImportPaymentLogDto)import.Data.ElementAt(0);}
}
Reference
https://github.com/dotnetcore/Magicodes.IE
轉(zhuǎn)載是一種動力 分享是一種美德
如果喜歡作者的文章,請關(guān)注【麥扣聊技術(shù)】訂閱號以便第一時間獲得最新內(nèi)容。本文版權(quán)歸作者和湖南心萊信息科技有限公司共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利。
原文作者:tanyongzheng
文檔官網(wǎng):docs.xin-lai.com
QQ群:
編程交流群<85318032>?
產(chǎn)品交流群<897857351>
總結(jié)
以上是生活随笔為你收集整理的开源导入导出库Magicodes.IE 多sheet导入教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。