public void Write( string path, IReadOnlyCollection <StudentPerfomance> students, IReadOnlyCollection <MarkForSubject> subjects, ICustomLogger logger) { try { int subjectCount = 0, studentCount = 0, leftEdgeOfTable = 1, topEdgeOfTable = 1, headerOffset = 1, tableSplitting = 2, subjectsOffset = students.Count() + headerOffset, marksOffset = subjectsOffset + 1, totalMarkOffset = marksOffset + 1; ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using var excel = new ExcelPackage(); var ws = excel.Workbook.Worksheets.Add("output"); ws.Cells.Style.Font.Size = 11; ws.Cells.Style.Font.Name = "Calibri"; ws.Cells[1, 1, 1, 4].Style.Font.Bold = true; ws.Cells[1, 1].Value = "Фамилия"; ws.Cells[1, 2].Value = "Имя"; ws.Cells[1, 3].Value = "Отчество"; ws.Cells[1, 4].Value = "Средняя оценка"; foreach (var item in students) { ws.Cells[leftEdgeOfTable, topEdgeOfTable].Style.Font.Bold = true; ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable].Value = item.Student.FirstName; ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable + 1].Value = item.Student.LastName; ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable + 2].Value = item.Student.MiddleName; ws.Cells[leftEdgeOfTable + headerOffset + studentCount++, topEdgeOfTable + 3].Value = item.AverageMark; } foreach (var item in subjects) { ws.Cells[subjectsOffset + tableSplitting, leftEdgeOfTable + subjectCount].Style.Font.Bold = true; ws.Cells[subjectsOffset + tableSplitting, leftEdgeOfTable + subjectCount].Value = item.Subject; ws.Cells[marksOffset + tableSplitting, leftEdgeOfTable + subjectCount++].Value = item.AverageMark; } ws.Cells[totalMarkOffset + tableSplitting + 1, leftEdgeOfTable].Value = "Средняя оценка в группе"; ws.Cells[totalMarkOffset + tableSplitting + 1, leftEdgeOfTable].Style.Font.Bold = true; ws.Cells[totalMarkOffset + tableSplitting + 2, leftEdgeOfTable].Value = subjects.Average(x => x.AverageMark); var file = new FileInfo(path); excel.SaveAs(file); } catch (ArgumentNullException e) { logger.Setup().Error(e.Message, e.GetType()); } catch (InvalidOperationException e) { logger.Setup().Error(e.Message, e.GetType()); } }
public IEnumerable <Exam> Read(string path, ICustomLogger logger) { const string CurrentEncoding = "utf-8"; const int OffsetOfMarks = 3; var exams = new List <Exam>(); try { using var reader = new StreamReader(path); using var csv = new CsvReader(reader, CultureInfo.InvariantCulture); csv.Configuration.Encoding = Encoding.GetEncoding(CurrentEncoding); var subjectName = csv.Parser.Read().Skip(OffsetOfMarks); while (csv.Read()) { for (int i = 0; i < subjectName.Count(); i++) { exams.Add(new Exam { Student = new Student(csv.GetField(0), csv.GetField(1), csv.GetField(2)), Subject = subjectName.Skip(i).First(), Mark = csv.GetField <int>(i + OffsetOfMarks), }); } } } catch (FileNotFoundException e) { logger.Setup().Fatal(e.Message, e.GetType()); } catch (ArgumentOutOfRangeException e) { logger.Setup().Error(e.Message, e.GetType()); } catch (TypeConverterException e) { logger.Setup().Error(e.Message, e.GetType()); } catch (CsvHelper.MissingFieldException e) { logger.Setup().Error(e.Message, e.GetType()); } catch (ArgumentNullException e) { logger.Setup().Error(e.Message, e.GetType()); } return(exams); }
public void Write(string path, IReadOnlyCollection <StudentPerfomance> students, IReadOnlyCollection <MarkForSubject> subjects, ICustomLogger logger) { try { var totalMark = subjects.Average(x => x.AverageMark); using var writer = new StreamWriter(path, false, Encoding.Default); writer.Write(JsonConvert.SerializeObject(students)); writer.Write(JsonConvert.SerializeObject(subjects)); writer.Write($"Total mark: {totalMark}"); } catch (ArgumentException e) { logger.Setup().Error(e.Message, e.GetType()); } catch (InvalidOperationException e) { logger.Setup().Error(e.Message, e.GetType()); } }