Импорт данных из Excel в существующий dataTable, когда свойства DB не соответствуют первому столбцу в excel ASp.NET / core

Например, изображение первого столбца excel-файла (не номер претензии, его столбец K):

введите описание изображения здесь

Мой проект предполагает импортировать данные из файлов Excel и Xml, выполняется XML-часть, но проблема с Excel заключается в том, что первый столбец (значения свойств) в файлах, которые я импортирую, не соответствует существующим данным. Таблица i

Часть свойств у меня:

public string ClaimNo { get; set; } public string ClientName { get; set; } public string Uwyear { get; set; } public string AgreementNo { get; set; } public string BusinessType { get; set; } public DateTime? PeriodStart { get; set; } public DateTime? PeriodEnd { get; set; } public string PolicyNo { get; set; } public string PolicyName { get; set; } public DateTime? DateOfLoss { get; set; } public string ClaimantName { get; set; } public string ClaimedInsured { get; set; } public DateTime? ReportDate { get; set; } 

Я работаю над ядром asp.net, уже написал код для экспорта данных из БД в файл excel, но у него есть так много свойств, как те файлы excel, которые я пытаюсь импортировать, и первый столбец был закодирован. Я использовал EEPlus.Core для этого.

Я уже написал функцию, которая импортирует файл xls

  [HttpPost] public async Task<IActionResult> XLSPage(IFormFile xlsFile) { var uploadsRoot = hostingEnvironment.WebRootPath; var filePath = Path.Combine(uploadsRoot, xlsFile.FileName).ToString(); if (xlsFile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { try { using (var fileStream = new FileStream(filePath, FileMode.Create)) { await xlsFile.CopyToAsync(fileStream); fileStream.Dispose(); var package = new ExcelPackage(new FileInfo(filePath)); ExcelWorksheet workSheet = package.Workbook.Worksheets.First(); //The code that i need to read data from Excel //and fill in it into my dataTable } } catch (Exception e) { var str = e.Message; TempData["XlsConvertErrorMsg"] = "Converting fail, check if your data is correct"; return View(); } } else { TempData["XlsUploadErrorMsg"] = "Uploadin fail, check if your file is xls"; return View(); } TempData["XlsUploadConvertSuccesMsg"] = "Uploading, converting of Excel succeeded!"; return View(nameof(ImportExportXlsController.Index)); ; } 

Итак, номер претензии находится в столбце K в файлах XLSX и в столбце 1 в файлах XML.

Вот код для чтения данных из Excel и заполнения dataTable, а затем изменения индексов столбцов:

 //Get the values in the sheet object[,] valueArray = workSheet.Cells.GetValue<object[,]>(); int maxRows = workSheet.Dimension.End.Row; int maxColumns = workSheet.Dimension.End.Column; DataTable dt = new DataTable(); //Column Headers for (int col = 0; col < maxColumns; col++) { dt.Columns.Add(valueArray[0,col]); } //Import Excel Data ot DataTable for (int row = 1; row < maxRows; row++) { DataRow dr = dt.NewRow(); for (int col = 0; col < maxColumns; col++) { dr[col] = valueArray[row,col].ToString(); } dt.Rows.Add(dr); } //Set the Column order dt.Columns["Claim Number"].SetOrdinal(0); - //Get the values in the sheet object[,] valueArray = workSheet.Cells.GetValue<object[,]>(); int maxRows = workSheet.Dimension.End.Row; int maxColumns = workSheet.Dimension.End.Column; DataTable dt = new DataTable(); //Column Headers for (int col = 0; col < maxColumns; col++) { dt.Columns.Add(valueArray[0,col]); } //Import Excel Data ot DataTable for (int row = 1; row < maxRows; row++) { DataRow dr = dt.NewRow(); for (int col = 0; col < maxColumns; col++) { dr[col] = valueArray[row,col].ToString(); } dt.Rows.Add(dr); } //Set the Column order dt.Columns["Claim Number"].SetOrdinal(0); 

Изменить 1:

Если Datatable еще не доступен, есть список записей / претензий и составить карту индексов столбцов на основе имен заголовков.

 public class Claim { public string ClaimNo { get; set; } public string ClientName { get; set; } public string Uwyear { get; set; } public string AgreementNo { get; set; } public string BusinessType { get; set; } public DateTime? PeriodStart { get; set; } public DateTime? PeriodEnd { get; set; } public string PolicyNo { get; set; } public string PolicyName { get; set; } public DateTime? DateOfLoss { get; set; } public string ClaimantName { get; set; } public string ClaimedInsured { get; set; } public DateTime? ReportDate { get; set; } } 

….

 List<Claim> claims = new List<Claim>(); for (int row = 1; row < maxRows; row++) { var c = new Claim(); c.ClaimNo= valueArray[row,MapCol("ClaimNo")].ToString(); c.ClientName= valueArray[row,MapCol("ClientName")].ToString(); ... } claims.Add(c); 

Изменить 2:

Используйте словарь для хранения номера столбца и имени. Затем, когда вы читаете строку заголовка Excel, вы можете заполнять словарь во время выполнения без жесткого кодирования.

 Dictionary<string, int> dictionaryColIndexs = new Dictionary<string, int>(); for (int col = 0; col < maxColumns; col++) { dictionaryColIndexs.Add(valueArray[0,col],col); } 

 private int MapCol(string colName) { if (dictionaryColIndexs.ContainsKey(colName)) { int index= dictionaryColIndexs[colName]; return index; } return -1; } 
  • Как передавать данные в электронную книгу Excel с помощью C #
  • Нераспознанный формат базы данных
  • Импорт данных из Excel в базу данных в C #
  • Как проверить орфографию, но не показывать диалог проверки орфографии?
  • Формирование форматирования доступа к базам данных или утверждение или группировка
  • Есть ли способ импортировать файл excel в представление сетки данных без установки Excel или Access DataBase Engine?
  • Как обновить столбец в базе данных mySQL с помощью Excel
  • Microsoft Access для SQL Server Express
  • Создание Excel из базы данных
  • Лучший способ выбора 8k + строк из таблицы
  • Загрузка файла на SQL Server не может получить его должным образом
  • Interesting Posts

    Эмуляция функции сплайна Excel «разброс с плавной кривой» в Matplotlib для 3 точек

    использовать переменную из $ get in query

    как объединить повторяющиеся строки и суммировать значения 3 столбца в excel

    Анализ через лист excel

    Почему я не могу передать массив (внутри массива) в качестве аргумента?

    Пользовательская форма VBA с DTPicker

    Требуется: код DXL для экспорта объекта OLE в Excel и указать параметр «Размещение»

    Добавление объекта в Crystal Report для экспорта в excel автоматически

    vba проблемы с поиском и findnext

    Формула для включения дат в 12-часовые категории

    Excel LOOKUP% персонажа не работает

    Присвоение переменной электронной таблице открытым сторонним программным обеспечением

    Как сохранить и обновить данные с одного интерфейса excel (лист 1) на другой лист (лист 2), чтобы отслеживать историю транзакций?

    Excel алгоритм для выполнения funcion в правильном порядке

    Как экспортировать данные формы html в excell

    Давайте будем гением компьютера.