using AsbCloudApp.Data.DailyReportModel; using ClosedXML.Excel; using System.Linq; namespace AsbCloudInfrastructure.Services.DailyReport { internal class BlockHeader : BlockAbstract { private readonly DailyReportHeadDto blockDto; public CellAddress AddressTitle { get; } public CellAddress AddressCustomer { get; } public CellAddress AddressDriller { get; } public CellAddress AddressPeriod { get; } public CellAddress AddressExampleData1 { get; } public CellAddress[] AddressesExampleDataArray { get; } /// /// Значение нижняя правая ячейка блока /// public override CellAddress AddressBlockBegin { get; } /// /// Значение нижняя правая ячейка блока /// public override CellAddress AddressBlockEnd { get; } public BlockHeader(CellAddress addressBlockBegin, DailyReportHeadDto blockDto) { AddressBlockBegin = addressBlockBegin.Copy(); this.blockDto = blockDto; AddressTitle = addressBlockBegin + (0, 0); AddressCustomer = addressBlockBegin + (1,0); AddressDriller = addressBlockBegin + (2, 0); AddressPeriod = addressBlockBegin + (3, 0); AddressExampleData1 = addressBlockBegin + (5, 0); AddressesExampleDataArray = new CellAddress[5]; for (int i = 0; i < 5; i++) AddressesExampleDataArray[i] = addressBlockBegin + (6 + i, 0); AddressBlockEnd = AddressesExampleDataArray.Last(); } public override void Draw(IXLWorksheet sheet) { // значение в одну ячейку sheet.Cell(AddressTitle) ._SetValue($"Суточная сводка бурения скважины: {blockDto.WellName}, куст: {blockDto.ClusterName}") .Style.SetH1(); // значение в несколько ячеек с объединением sheet._Range(AddressCustomer, AddressCustomer + (0,7)) ._SetValue($"Заказчик: {blockDto.Customer}"); sheet.Cell(AddressDriller) ._SetValue($"Подрядчик: {blockDto.Contractor}"); sheet._Range(AddressExampleData1, AddressExampleData1 + (0, 4)) ._SetValue(blockDto.BottomholeDepth); // для примера с будущей формулой } } internal class BlockWithFormula : BlockAbstract { private readonly BlockHeader blockHeader; public override CellAddress AddressBlockBegin { get; } public override CellAddress AddressBlockEnd { get; } public CellAddress AddressFomulaExample { get; set; } public BlockWithFormula(CellAddress addressBlockBegin, BlockHeader blockHeader) { AddressFomulaExample = addressBlockBegin + (0, 0); AddressBlockBegin = addressBlockBegin.Copy(); AddressBlockEnd = addressBlockBegin + (1, 0); this.blockHeader = blockHeader; } public override void Draw(IXLWorksheet sheet) { var formula = string.Format("{0}/5", blockHeader.AddressExampleData1.ToString()); sheet.Cell(AddressFomulaExample) .SetFormulaA1(formula); } } internal abstract class BlockAbstract { public abstract CellAddress AddressBlockBegin { get; } public abstract CellAddress AddressBlockEnd { get; } public abstract void Draw(IXLWorksheet sheet); } }