/// <summary> /// 添加数据行错误 /// </summary> /// <param name="rowIndex"></param> /// <param name="importerHeaderInfo"></param> /// <param name="errorMessage"></param> protected virtual void AddRowDataError(int rowIndex, ImporterHeaderInfo importerHeaderInfo, string errorMessage = "数据格式无效!") { var rowError = ImportResult.RowErrors.FirstOrDefault(p => p.RowIndex == rowIndex); if (rowError == null) { rowError = new DataRowErrorInfo { RowIndex = rowIndex }; ImportResult.RowErrors.Add(rowError); } rowError.FieldErrors.Add(importerHeaderInfo.ExporterHeader.Name, errorMessage); }
public async Task ImportFailureData() { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "学生基础数据导入带描述头.xlsx"); var import = await Importer.Import <ImportStudentDtoWithSheetDesc>(filePath); import.ShouldNotBeNull(); if (import.Exception != null) { _testOutputHelper.WriteLine(import.Exception.ToString()); } if (import.RowErrors.Count > 0) { _testOutputHelper.WriteLine(JsonConvert.SerializeObject(import.RowErrors)); } import.HasError.ShouldBeFalse(); import.Data.ShouldNotBeNull(); import.Data.Count.ShouldBe(16); List <DataRowErrorInfo> errorList = new List <DataRowErrorInfo>(); //出现五条无法完成业务效验的错误数据 foreach (var item in import.Data.Skip(5).ToList()) { var errorInfo = new DataRowErrorInfo() { //由于 Index 从开始 RowIndex = import.Data.ToList().FindIndex(o => o.Equals(item)) + 1, }; errorInfo.FieldErrors.Add("序号", "数据库已重复"); errorInfo.FieldErrors.Add("学籍号", "无效的学籍号,疑似外来人物"); errorList.Add(errorInfo); } bool result = Importer.OutputBussinessErrorData <ImportStudentDtoWithSheetDesc>(filePath, errorList, out string msg); using (var stream = new FileStream(filePath, FileMode.Open)) { var resultByte = Importer.OutputBussinessErrorData <ImportStudentDtoWithSheetDesc>(stream, errorList, out byte[] fileByte); resultByte.ShouldBeTrue(); fileByte.ShouldNotBeNull(); } result.ShouldBeTrue(); }
/// <summary> /// 获取当前行 /// </summary> /// <param name="rowIndex"></param> /// <returns></returns> private DataRowErrorInfo GetDataRowErrorInfo(int rowIndex) { if (ImportResult.RowErrors == null) { ImportResult.RowErrors = new List <DataRowErrorInfo>(); } var dataRowError = ImportResult.RowErrors.FirstOrDefault(p => p.RowIndex == rowIndex); if (dataRowError == null) { dataRowError = new DataRowErrorInfo { RowIndex = rowIndex }; ImportResult.RowErrors.Add(dataRowError); } return(dataRowError); }
public async Task ImportFailureAxisDataWithoutDesc() { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "管轴导入数据.xlsx"); var import = await Importer.Import <ImportGalleryAxisDto>(filePath); import.ShouldNotBeNull(); if (import.Exception != null) { _testOutputHelper.WriteLine(import.Exception.ToString()); } if (import.RowErrors.Count > 0) { _testOutputHelper.WriteLine(JsonConvert.SerializeObject(import.RowErrors)); } import.HasError.ShouldBeFalse(); import.Data.ShouldNotBeNull(); List <DataRowErrorInfo> ErrorList = new List <DataRowErrorInfo>(); //出现五条无法完成业务效验的错误数据 foreach (var item in import.Data.ToList()) { var errorInfo = new DataRowErrorInfo() { //由于 Index 从开始 RowIndex = import.Data.ToList().FindIndex(o => o.Equals(item)) + 1, }; errorInfo.FieldErrors.Add("管轴编号", "数据库已重复"); errorInfo.FieldErrors.Add("管廊编号", "责任区域不存在"); errorInfo.FieldErrors.Add("责任区域", "责任区域不存在"); ErrorList.Add(errorInfo); } var result = Importer.OutputBussinessErrorData <ImportGalleryAxisDto>(filePath, ErrorList, out string errorDataFilePath); result.ShouldBeTrue(); }
/// <summary> /// 导入模型验证数据 /// </summary> /// <returns></returns> public Task <ImportResult <T> > Import(string filePath = null) { if (!string.IsNullOrWhiteSpace(filePath)) { FilePath = filePath; } ImportResult = new ImportResult <T>() { RowErrors = new List <DataRowErrorInfo>() }; ExcelImporterAttribute = typeof(T).GetAttribute <ExcelImporterAttribute>(true) ?? new ExcelImporterAttribute(); try { CheckImportFile(FilePath); using (Stream stream = new FileStream(FilePath, FileMode.Open)) { using (var excelPackage = new ExcelPackage(stream)) { #region 检查模板 ParseTemplate(excelPackage); if (ImportResult.HasError) { return(Task.FromResult(ImportResult)); } #endregion ParseData(excelPackage); for (var i = 0; i < ImportResult.Data.Count; i++) { var isValid = ValidatorHelper.TryValidate(ImportResult.Data[i], out var validationResults); if (!isValid) { var dataRowError = new DataRowErrorInfo { RowIndex = ExcelImporterAttribute.HeaderRowIndex + i + 1 }; foreach (var validationResult in validationResults) { var key = validationResult.MemberNames.First(); var column = ImporterHeaderInfos.FirstOrDefault(a => a.PropertyName == key); if (column != null) { key = column.ExporterHeader.Name; } var value = validationResult.ErrorMessage; if (dataRowError.FieldErrors.ContainsKey(key)) { dataRowError.FieldErrors[key] += (Environment.NewLine + value); } else { dataRowError.FieldErrors.Add(key, value); } } ImportResult.RowErrors.Add(dataRowError); } } LabelingError(excelPackage); } } } catch (Exception ex) { ImportResult.Exception = ex; } return(Task.FromResult(ImportResult)); }