Упростите код при импорте данных Excel с EPPlus - PullRequest
0 голосов
/ 20 ноября 2019

Я создал контроллер для импорта данных из 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

Но я потерпел неудачу из-за отсутствиязнания, так как я новичок в кодировании.

Можно ли как-нибудь сократить усилия по перечислению всех полей и форматов?

...