Я создал контроллер для импорта данных из Excel и хотел узнать, можно ли оптимизировать код, связанный с различными столбцами в различных форматах. У меня есть таблица с 22 столбцами, и я хотел бы избежать перечисления всех полей в коде. Я предпочел бы получить номер столбца и их имя из заголовка файла, а не перечислять их все в коде.
Мой код:
using ExcelPackage package = new ExcelPackage(file);
ExcelWorksheet workSheet = package.Workbook.Worksheets["Project"];
int totalRows = workSheet.Dimension.Rows;
List<ProjectTemp> projectList = new List<ProjectTemp>();
for (int i = 2; i <= totalRows; i++)
{
projectList.Add(new ProjectTemp
{
PID = Convert.ToInt32(workSheet.Cells[i, 1].Value.ToString().Trim()),
ProjectName = workSheet.Cells[i, 2].Value.ToString(),
ClientId = Convert.ToInt32(workSheet.Cells[i, 3].Value.ToString()),
ProjectStatus = workSheet.Cells[i, 4].Value.ToString(),
ForecastOwner = workSheet?.Cells[i, 5]?.Value?.ToString(),
DSM = workSheet?.Cells[i, 6]?.Value?.ToString(),
DeliveryIC = workSheet?.Cells[i, 7]?.Value?.ToString(),
DeliveryINT = workSheet?.Cells[i, 8]?.Value?.ToString(),
Partner = workSheet?.Cells[i, 9]?.Value?.ToString(),
ProjectTypeId = Convert.ToInt32(workSheet.Cells[i, 10].Value.ToString()),
Budget = Convert.ToDouble(workSheet.Cells[i, 11].Value.ToString()),
CurrencyId = Convert.ToInt32(workSheet.Cells[i, 12].Value.ToString()),
BudgetHours = Convert.ToDouble(workSheet.Cells[i, 13].Value.ToString()),
LQPercentage = Convert.ToDouble(workSheet?.Cells[i, 14]?.Value?.ToString()),
EOQPercentage = Convert.ToDouble(workSheet?.Cells[i, 15]?.Value?.ToString()),
RiskAssessmentId = Convert.ToInt32(workSheet?.Cells[i, 16]?.Value?.ToString()),
StartDate = Convert.ToDateTime(workSheet.Cells[i, 17].Value.ToString()),
EndDate = Convert.ToDateTime(workSheet.Cells[i, 18].Value.ToString()),
GoliveDate = Convert.ToDateTime(workSheet?.Cells[i, 19]?.Value?.ToString()),
ContractDate = Convert.ToDateTime(workSheet.Cells[i, 20].Value.ToString()),
ExpirationDate = Convert.ToDateTime(workSheet.Cells[i, 21].Value.ToString()),
IsArchived = Convert.ToBoolean(workSheet.Cells[i, 22].Value.ToString()),
});
}
_db.ProjectTemp.AddRange(projectList);
_db.SaveChanges();
Я пытался создать нечто похожее на то, что описано в следующем URL: https://www.mikesdotnetting.com/article/297/the-best-way-to-import-data-from-excel-to-sql-server-via-asp-net
Но я потерпел неудачу из-за отсутствиязнания, так как я новичок в кодировании.
Можно ли как-нибудь сократить усилия по перечислению всех полей и форматов?