Проблема стилей POI в Apache при объединении листов xlsx с другим листом книги - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь объединить листы 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;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...