diff --git a/backend/Tnsu.ApprovalRoute.Application/Reports/RouteExportWorkbook.cs b/backend/Tnsu.ApprovalRoute.Application/Reports/RouteExportWorkbook.cs index ed004d3..767bc08 100644 --- a/backend/Tnsu.ApprovalRoute.Application/Reports/RouteExportWorkbook.cs +++ b/backend/Tnsu.ApprovalRoute.Application/Reports/RouteExportWorkbook.cs @@ -71,6 +71,8 @@ public static class RouteExportWorkbook var rowIndex = 0; foreach (var section in sheetData.Sections) { + if (rowIndex > 0) rowIndex++; // пустая строка только между маршрутами + if (!string.IsNullOrWhiteSpace(section.Title)) { var titleRow = sheet.CreateRow(rowIndex); @@ -81,6 +83,9 @@ public static class RouteExportWorkbook rowIndex++; } + // Шапка колонок — один раз на маршрут: исполнители идут сразу под + // согласующими, их отделяет только строка-подпись. + var firstGroup = true; foreach (var group in section.Groups) { var captionRow = sheet.CreateRow(rowIndex); @@ -90,14 +95,19 @@ public static class RouteExportWorkbook sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 0, Columns.Length - 1)); rowIndex++; - var header = sheet.CreateRow(rowIndex++); - for (var i = 0; i < Columns.Length; i++) + if (firstGroup) { - var cell = header.CreateCell(i); - cell.SetCellValue(Columns[i].Title); - cell.CellStyle = headerStyle; + var header = sheet.CreateRow(rowIndex++); + for (var i = 0; i < Columns.Length; i++) + { + var cell = header.CreateCell(i); + cell.SetCellValue(Columns[i].Title); + cell.CellStyle = headerStyle; + } } + firstGroup = false; + foreach (var row in group.Rows) { var excelRow = sheet.CreateRow(rowIndex++); @@ -110,8 +120,6 @@ public static class RouteExportWorkbook WriteText(excelRow, 4, row.Condition, cellStyle); WriteText(excelRow, 5, row.Comment, cellStyle); } - - rowIndex++; // пустая строка между таблицами } } }