fix: колонки с датами теряли заливку шапки (SetDefaultColumnStyle в NPOI)
H1/I1/K1 («Дата подачи заявки», «Дата закрытия вакансии», «Дата выхода») выходили с форматом даты вместо синей заливки шапки — хотя код применял ко всей строке 1 один и тот же стиль Header. Причина — SetDefaultColumnStyle(col, DataDate), вызванный ПОСЛЕ записи строк: в отличие от чистого OOXML, где стиль колонки уступает явному стилю ячейки, NPOI этим вызовом переписывает стиль уже существующих ячеек колонки целиком, включая шапку. Формат даты и так стоит на каждой конкретной ячейке с датой (SetDate) — вызов просто убран. Добавлен регрессионный тест (сравнение Index стиля, а не ссылки на объект — NPOI отдаёт новую обёртку ICellStyle на каждый вызов CellStyle, ссылки не совпадают даже у идентичного стиля). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -216,11 +216,16 @@ public static class VacancyReportWorkbook
|
||||
/// </summary>
|
||||
private static void FinishVacancyListSheet(XSSFSheet sheet, Styles styles, int lastDataRowIdx)
|
||||
{
|
||||
// Даты — дефолтным стилем колонки, а не только по заполненным ячейкам:
|
||||
// формат должен остаться и у строк, которые допишут руками.
|
||||
foreach (var col in (int[])[ColSubmitDate, ColClosingDate, ColStartDate])
|
||||
sheet.SetDefaultColumnStyle(col, styles.DataDate);
|
||||
|
||||
// ВАЖНО: даты НЕ переносятся сюда через SetDefaultColumnStyle — NPOI (в
|
||||
// отличие от чистого OOXML, где стиль колонки должен уступать явному
|
||||
// стилю ячейки) переписывает им стиль уже существующих ячеек колонки
|
||||
// целиком, включая шапку: заголовки «Дата подачи заявки»/«Дата закрытия
|
||||
// вакансии»/«Дата выхода» лишались синей заливки и получали формат даты
|
||||
// вместо неё. Формат даты у самих дат и так стоит явно, ячейка за
|
||||
// ячейкой (см. SetDate) — колонки, дописанные в файл руками ниже данных,
|
||||
// формат не унаследуют, но это не тот случай, ради которого стоит опять
|
||||
// ломать шапку.
|
||||
//
|
||||
// Шапка закреплена — лист длинный, без этого при прокрутке не видно,
|
||||
// какая колонка какая.
|
||||
sheet.CreateFreezePane(0, HeaderRowIdx + 1);
|
||||
|
||||
Reference in New Issue
Block a user