Мне нужно скопировать все с XSSFWorkbook
на SXSSFWorkbook
, потому что я не могу записать XSSFWorkbook
на диск из-за OutOfMemoryException
.
Для этого я целый день искал в Интернете наиболее эффективный способ копирования листов между книгами без потери форматирования, стилей и т. Д. Я использовал эту ветку форума , чтобы создать свой собственный класс утилит. работать с версиями Excel, упомянутыми выше.
Пока он копирует все необходимое, с небольшим отклонением. На одном листе в исходном файле фон ячейки определяется в пределах Theme Colors
. Это приводит к тому, что новый файл фактически отображает другой цвет, чем должен.
Оригинальный цвет:
Новый цвет:
Кроме того, если вы не знаете, что я имею в виду под Theme Colors
(я только что понял, что оба цвета находятся в одном месте):
Это код, который я использую для копирования 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)
, кажется, вызывает мою проблему. Тем не менее, я не нашел способа удалить тему для рабочей книги.