using AsbCloudApp.Data; using AsbCloudApp.Data.DailyReport; using AsbCloudInfrastructure.Services.DailyReport.DailyReportBlocks; using ClosedXML.Excel; using System.Collections.Generic; using System.IO; namespace AsbCloudInfrastructure.Services.DailyReport { public class DailyReportMakerExcel { private IEnumerable OperationCategories = null!; public Stream MakeReportFromBlocks(DailyReportDto dto, IEnumerable operationCategories) { OperationCategories = operationCategories; using var workbook = new XLWorkbook(); FillExampleBlocks(workbook, dto); MemoryStream memoryStream = new MemoryStream(); workbook.SaveAs(memoryStream, new SaveOptions { }); memoryStream.Seek(0, SeekOrigin.Begin); return memoryStream; } private void FillExampleBlocks(XLWorkbook workbook, DailyReportDto dto) { var sheet = workbook.Worksheets.Add(dto.Head.ReportDate.ToString("dd.MM.yyyy")); var addressStart = new CellAddress(sheet, 2, 2); var blockHeader = new HeadBlock(addressStart, dto.Head); addressStart = blockHeader.AddressBlockEnd + (1, 0); addressStart.ColumnNumber = 2; var blockBha = new BhaBlock(addressStart, dto.Bha); addressStart = blockBha.AddressBlockEnd + (1, 0); addressStart.ColumnNumber = 2; var timeBalance = new TimeBalanceBlock(addressStart, dto.TimeBalance, OperationCategories); addressStart = timeBalance.AddressBlockEnd + (1, 0); addressStart.ColumnNumber = 2; var blockDimensionless = new DimensionlessBlock(addressStart, dto.NoDrilling); addressStart = blockDimensionless.AddressBlockEnd + (1, 0); addressStart.ColumnNumber = 2; var blockSaub = new SaubBlock(addressStart, dto.Saub, blockHeader); addressStart = blockSaub.AddressBlockEnd + (1, 0); blockDimensionless.SaubBlock = blockSaub; addressStart.ColumnNumber = 2; var blockSign = new SignBlock(addressStart, dto.Sign); addressStart = blockSign.AddressBlockEnd + (1, 0); addressStart.ColumnNumber = 2; blockHeader.Draw(sheet); blockBha.Draw(sheet); timeBalance.Draw(sheet); blockDimensionless.Draw(sheet); blockSaub.Draw(sheet); blockSign.Draw(sheet); //sheet.Columns().AdjustToContents(); // Adjust column width sheet.Rows().AdjustToContents(); } } }