Apache POI Wrong Cells Шрифт устанавливается - PullRequest
0 голосов
/ 19 января 2019

У меня проблема с Apache POI, заключающаяся в том, что, когда я устанавливаю шрифт для стиля, а затем задаю этот стиль для ячейки, он правильно применяет этот шрифт к нужной ячейке, но также применяет этот шрифт к другим клетки. Например, я создаю книгу HSSF excel из созданного мной файла шаблона. В этом файле шаблона уже заполнены ячейки, которые всегда будут одинаковыми, и когда я заполняю нужные ячейки и изменяю их размер шрифта, некоторые размеры шрифтов в предварительно заполненных ячейках также меняются. Однако это происходит только в том случае, если я не создаю новый HSSFCellStyle. Проблема в том, что если я просто создаю новый CellStyle, я теряю форматирование, которое у меня есть, для ячеек, которые я хочу заполнить. Это может быть легче объяснить с помощью некоторых примеров и кода. Итак, вот два разных выхода, которые я могу получить.

BigLabels

MissingBorders

На первом рисунке вы видите, что «2400 Hr Clock» был изменен, хотя в моем коде я никогда не применяю стиль к этой ячейке, он только (должен только) применяется к ячейке даты и времени клетка. Это когда я устанавливаю стиль следующим образом:

HSSFCellStyle dataStyle = cell.getCellStyle();
dataStyle.setFont(font);

Но когда я вместо этого установил стиль:

HSSFCellStyle dataStyle = currentWorkbook.createCellStyle();
dataStyle.setFont(font);

Я получаю то, что на втором изображении, но я теряю предыдущее форматирование, как границы первых частей ячеек. Обратите внимание, что причина, по которой я не потерял всю границу, состоит в том, что ячейки представляют собой несколько ячеек, объединенных вместе, но вы можете видеть, что часть границы отсутствует, но «Часы 2400 часов» не были изменены. Я не уверен, что является причиной этого, и я не уверен, что попробовать дальше. Шрифт создан так:

HSSFFont font = currentWorkbook.createFont();
font.setFontName("Times");
font.setFontHeightInPoints(fontSize);

1 Ответ

0 голосов
/ 19 января 2019

Решение состоит в том, чтобы клонировать стиль вместо того, чтобы получить стиль, подобный этому:

HSSFCellStyle dataStyle = currentWorkbook.createCellStyle();
dataStyle.cloneStyleFrom(cell.getCellStyle());
dataStyle.setFont(font);
...