Я пытаюсь объединить листы xlsx из разных рабочих книг в одну рабочую книгу.Я могу слить хорошо, но проблема, с которой я сталкиваюсь, связана со стилем и форматированием, которое теряется при слиянии.Я искал на форумах, где все предлагают то же самое, что у меня есть в моем фрагменте кода ниже, но по неизвестной причине, кажется, стиль не работает.Будем благодарны за любые предложения по этому вопросу.
addSheet (XSSFSheet sheet, XSSFWorkbook wb) {
XSSFSheet sheet2 = wb.createSheet();
Map<Integer, XSSFCellStyle> styleMap = new HashMap<>();
for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
XSSFRow oldrow = sheet.getRow(j);
XSSFRow newrow = sheet2.createRow(j);
for (int k = oldrow.getFirstCellNum(); k < oldrow.getLastCellNum(); k++) {
XSSFCell oldcell = oldrow.getCell(k);
XSSFCell newcell = newrow.createCell(k);
newcell.setCellType(oldcell.getCellType());
int stHashCode = oldcell.getCellStyle().hashCode();
XSSFCellStyle newCellStyle = styleMap.get(stHashCode);
if (newCellStyle == null) {
newCellStyle = wb.createCellStyle();
newCellStyle.cloneStyleFrom(oldcell.getCellStyle());
styleMap.put(stHashCode, newCellStyle);
}
newcell.setCellStyle(newCellStyle);
switch (oldcell.getCellType()) {
case FORMULA:
newcell.setCellFormula(oldcell.getCellFormula());
break;
case NUMERIC:
newcell.setCellValue(oldcell.getNumericCellValue());
break;
case STRING:
newcell.setCellValue(oldcell.getStringCellValue());
break;
case BLANK:
newcell.setCellType(BLANK);
break;
case BOOLEAN:
newcell.setCellValue(oldcell.getBooleanCellValue());
break;
case ERROR:
newcell.setCellErrorValue(oldcell.getErrorCellValue());
break;
default:
newcell.setCellValue(oldcell.getStringCellValue());
break;
}
}
}
}