Установка стилей в ячейке Excel устанавливает одинаковый стиль для всей книги. - PullRequest
0 голосов
/ 30 августа 2018

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь ввести какой-либо стиль в какую-либо конкретную ячейку, один и тот же стиль применяется ко всей книге, даже к листам, к которым у меня нет доступа (дополнительные листы представлены в конце).

например, когда я использую метод setFillForegroundColor () для headerCell, он помещает один и тот же цвет во все ячейки после той, которую я пытаюсь изменить. Та же проблема произошла и с dataCell, когда я попытался установить для них границы (код прокомментирован)

Они влияют только на ячейки, в которых ранее не было данных. Ячейки, имеющие данные до запуска моей программы (я пытаюсь добавить / изменить листы с уже существующими данными), остаются неизменными. Я все еще не могу найти проблему. Ниже приведен весь код моего метода.

private void prepareDataForExcel() {
try {
    System.out.println(dataMap);
    String sheetNameMapArr[] = props.getProperty("sheetNameMap").split(",");
    XSSFWorkbook workbook = new XSSFWorkbook(OPCPackage.open(new File("mydata.xlsx").getAbsolutePath()));

    for (String sheetMap : sheetNameMapArr) {
        String table = sheetMap.split("~")[0];
        String sheetNm = sheetMap.split("~")[1];
        int rowNum = 0;
        String headerArr[] = null;

        String opDataArr[] = dataMap.get(table).toString().split(",");

        XSSFSheet sheet = workbook.getSheet(sheetNm);
        XSSFRow row = sheet.getRow(rowNum);
        int lstCol = row.getLastCellNum();

        // Setting Headers
        String headerMapArr[] = props.getProperty("tableHeaderMap").split(";");
        for (String header : headerMapArr) {
            if (header.split("~")[0].equalsIgnoreCase(table)) {
                headerArr = header.split("~")[1].split(",");
            }
        }

        int headerIndx = lstCol;
        if (headerArr != null) {
            ++rowNum;
            for (String header : headerArr) {
                XSSFCell headerCell = row.createCell(headerIndx, Cell.CELL_TYPE_STRING);
                ++headerIndx;
                headerCell.setCellValue(header);
                headerCell.getCellStyle()
                        .setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 255, 204)));
                headerCell.getCellStyle().setFillPattern(FillPatternType.SOLID_FOREGROUND);
            }
        }

        // Setting Date
        String dt = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
        row = sheet.getRow(rowNum);
        if (headerIndx > lstCol)
            sheet.addMergedRegion(
                    new CellRangeAddress(rowNum, rowNum, lstCol, lstCol + (headerIndx - lstCol - 1)));
        XSSFCell dtCell = row.createCell(lstCol, Cell.CELL_TYPE_STRING);
        dtCell.setCellValue(dt);

        // Populating Data
        int dataRowIndx = ++rowNum;
        int dataColIndx = lstCol;
        for (String tableData : opDataArr) {
            String dataArr[] = tableData.split("~");
            for (String data : dataArr) {
                row = sheet.getRow(dataRowIndx);

                if (row == null)
                    row = sheet.createRow(dataRowIndx);

                XSSFCell dataCell = row.createCell(dataColIndx, Cell.CELL_TYPE_STRING);
                ++dataColIndx;
                if (isNumeric(data))
                    dataCell.setCellValue(Double.valueOf(data));
                else
                    dataCell.setCellValue(data);

                // dataCell.getCellStyle().setBorderBottom(XSSFCellStyle.BORDER_THIN);
                // dataCell.getCellStyle().setBorderLeft(XSSFCellStyle.BORDER_THIN);
                // dataCell.getCellStyle().setBorderRight(XSSFCellStyle.BORDER_THIN);
                // dataCell.getCellStyle().setBorderTop(XSSFCellStyle.BORDER_THIN);
            }
            ++dataRowIndx;
            dataColIndx = lstCol;
        }

    }

    FileOutputStream fileOut = new FileOutputStream(new File("mydata_res.xlsx"));
    workbook.write(fileOut);
    fileOut.close();
    workbook.close();

} catch (Exception e) {
    e.printStackTrace();
    System.exit(1);
}
}
...