Как создать конкретные стили ячеек с помощью xssf в c # (NPOI) - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю файл Excel xlsx с нуля с помощью NPOI в c #, и мне нужно иметь конкретные стили ячеек для каждой из моих ячеек.Но, насколько я могу судить, каждый раз, когда я меняю стиль ячейки одной из моих клеток, он изменяет другую, не связанную клетку.

Каждый раз, когда я создаю ячейку, я назначаю Cellstyle, созданный прямо перед этим, с помощью моего XSSFWorkbook.CreateCellStyle ().Я предполагаю, что это должен быть особый стиль ячейки только для клетки.Однако я вижу, что это не так, и, похоже, это та же ссылка, что и клетки, созданные до или после.Несмотря на то, что я вызываю XSSFWorkbook.CreateCellStyle () и устанавливаю его для каждой ячейки, которую я создаю.

Вот как я создаю свои ячейки:


 for (var i = 0; i < nbCellules; i++)
    {
        var cell = row.CreateCell(i);
        var style = xssfwb.CreateCellStyle();
        cell.CellStyle = xssfwb.CreateCellStyle();
        cell.CellStyle.BorderLeft = GetLeftBorderStyleFromIndex(i);
        cell.CellStyle.BorderRight = GetRightBorderStyleFromIndex(i);
    }

С этим кодом я делаю следующее:

   row.GetCell(0).CellStyle.BorderBottom = BorderStyle.Thick;

Я думаю, что нужно воздействовать только на эту конкретную ячейку.
Однако теперь у каждого ряда также есть толстая нижняя граница.

Кто-нибудь знает, где я не прав?

1 Ответ

0 голосов
/ 01 мая 2019

Хорошо, похоже, я понял, что происходит.

Обратите внимание, что никто не ответил мне вообще, так что это эмпирический ответ.

Похоже, что если вы сделаете это:

   var cell1 = sheet.GetRow(0).CreateCell(0);
   var style = workBook.CreateCellStyle();
   style.BorderBottom = BorderStyle.Thick;

   var cell2 = sheet.GetRow(1).CreateCell(0);
   var style = workBook.CreateCellStyle();
   style.BorderBottom = BorderStyle.Thick;

   // Now if you decide to change something from the style of cell2
   cell2.CellStyle.BorderRight = BorderStyle.Dotted;

   // it seems that cell1 now has BorderStyle.Dotted pour son Cellstyle.BorderRight

Я не знаю точно, что происходит, но кажется, что, как только CellStyle воздействует на ячейку, если он такой же, как CellStyle другой ячейки, тогда он не клонируется, а совместно используется.

Затем я описал каждый cellStyle, прежде чем связать их с ячейкой, и теперь это сработало.

Не стесняйтесь связаться со мной для получения более подробной информации!

...