From 5f67856119cf36a2a23f8783e8027da0d3ecf76d Mon Sep 17 00:00:00 2001 From: shept Date: Mon, 9 Jun 2025 02:09:25 +0500 Subject: [PATCH] added working excel export --- SurveyLib.Tools/Tools/TableExporter.cs | 31 +++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/SurveyLib.Tools/Tools/TableExporter.cs b/SurveyLib.Tools/Tools/TableExporter.cs index 20d8055..50bb56f 100644 --- a/SurveyLib.Tools/Tools/TableExporter.cs +++ b/SurveyLib.Tools/Tools/TableExporter.cs @@ -8,27 +8,33 @@ public class TableExporter : IDataExporter { private readonly ISurveyService _surveyService; private readonly IQuestionService _questionService; + private readonly ICompletionService _completionService; + private readonly IAnswerService _answerService; - public TableExporter(ISurveyService surveyService, IQuestionService questionService) + public TableExporter(ISurveyService surveyService, IQuestionService questionService, + ICompletionService completionService, IAnswerService answerService) { _surveyService = surveyService; _questionService = questionService; + _completionService = completionService; + _answerService = answerService; } public async Task ExportDataBySurveyIdAsync(int surveyId) { var survey = await _surveyService.GetSurveyAsync(surveyId); var questions = await _questionService.GetQuestionsBySurveyIdAsync(surveyId); + var completions = await _completionService.GetCompletionsBySurveyIdAsync(surveyId); using var workbook = new XLWorkbook(); - var ws = workbook.Worksheets.Add("Sheet1"); + var ws = workbook.Worksheets.Add(survey.Title); ws.Cell(1, 1).Value = "Title"; ws.Cell(1, 2).Value = survey.Title; ws.Cell(2, 1).Value = "Description"; ws.Cell(2, 2).Value = survey.Description; - ws.Cell(3, 1).Value = "Created At"; + ws.Cell(3, 1).Value = "Export issued at"; ws.Cell(3, 2).Value = DateTime.UtcNow; ws.Cell(4, 1).Value = "Completed By"; @@ -41,6 +47,25 @@ public class TableExporter : IDataExporter column++; } + var row = 5; + foreach (var completion in completions) + { + ws.Cell(row, 1).Value = completion.CompletedBy?.ToString() ?? "Unknown"; + ws.Cell(row, 2).Value = completion.FinishedAt; + column = 3; + var answers = await _answerService.GetAnswersByCompletionIdAsync(completion.Id); + var answersGroupedByQuestion = answers.GroupBy(a => a.QuestionId); + foreach (var questionAnswers in answersGroupedByQuestion) + { + ws.Cell(row, column).Value = string.Join("; ", questionAnswers.Select(a => a.AnswerText)); + column++; + } + + row++; + } + + ws.Columns().AdjustToContents(); + using var stream = new MemoryStream(); workbook.SaveAs(stream); return stream.ToArray();