Apache Poi, как определить цвет шаблона? - PullRequest
1 голос
/ 05 июня 2019

Мне нужно скопировать все с XSSFWorkbook на SXSSFWorkbook, потому что я не могу записать XSSFWorkbook на диск из-за OutOfMemoryException.

Для этого я целый день искал в Интернете наиболее эффективный способ копирования листов между книгами без потери форматирования, стилей и т. Д. Я использовал эту ветку форума , чтобы создать свой собственный класс утилит. работать с версиями Excel, упомянутыми выше.

Пока он копирует все необходимое, с небольшим отклонением. На одном листе в исходном файле фон ячейки определяется в пределах Theme Colors. Это приводит к тому, что новый файл фактически отображает другой цвет, чем должен.

Оригинальный цвет: enter image description here

Новый цвет:

enter image description here

Кроме того, если вы не знаете, что я имею в виду под Theme Colors (я только что понял, что оба цвета находятся в одном месте):

enter image description hereenter image description here

Это код, который я использую для копирования CellStyles:

int styleHashCode = oldCell.getCellStyle().hashCode();
CellStyle newCellStyle = styleMap.get(styleHashCode);
if (newCellStyle == null) {
    newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
    newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
    styleMap.put(styleHashCode, newCellStyle);
}
newCell.setCellStyle(newCellStyle);

На данный момент это вызывает указанный сбой. Поскольку я только что узнал, что является причиной этой проблемы, у меня не было много времени, чтобы проверить все свои собственные мысли о том, как решить эту проблему, но я был бы благодарен за каждую подсказку / решение, которое существует для этой проблемы.

Итак, подведем итог:

Как можно скопировать цвет для Theme Colors, используемый в CellStyles?


Обратите внимание, что я могу легко скопировать цвет со значениями RGB, проблема заключается в определении Template Colors.

РЕДАКТИРОВАТЬ: Я только что обнаружил, что вызов ThemesTable.inheritFromThemeAsRequired(XSSFColor color), кажется, вызывает мою проблему. Тем не менее, я не нашел способа удалить тему для рабочей книги.

...