Класс CellRangeAddress библиотека POI

142
10 августа 2018, 21:10

При записи в файл Excel воспользовался классом объединения ячеек CellRangeAddress. В объединенные ячейки было добавлено повторное значение:

Ячейка А1; значение 12
Ячейка А3; значение 12
Ячейка А4; значение 12

Объединение прошло отлично, то есть ячейка как положено превратилась в А1 с общим значением 12.

Но, когда я начал суммировать значения, у меня получается, что эту ячейку он суммирует 3 раза, то есть если на нее нажать, то в углу увижу сумму не 12, а 36 и количество 3. Если ячейку разъединить, то в итоге увижу

Ячейка А1; значение 12
Ячейка А3; значение 12
Ячейка А4; значение 12 - далее если опять объединить, то все нормально становится.

К сожалению, ответа я не нашел, как мне можно избавиться от этого, передавать в А2 и А3 - 0, как вариант, но, у меня нет такой возможности. Может кто знает, как исправить положение?

XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
for (int j = 5; j < sheet.getLastRowNum() + 1; j++) {
    for (Map.Entry<Map<String, Boolean>, Map<List<ResultClazz>, Integer>> map : totalMap.entrySet()) {
        for (Map.Entry<String, Boolean> mapKey: map.getKey().entrySet()) {
            if (!mapKey.getValue()) {
                XSSFRow xssfRow = sheet.getRow(j);
                String val = xssfRow.getCell(12).getStringCellValue();
                if (val.equals(mapKey.getKey())) {
                    // Вставляем запись
                    int q = j;
                    for (Map.Entry<List<ResultClazz>, Integer> resultValue : map.getValue().entrySet()) {
                        if (resultValue.getValue() > 1) {
                            for (ResultClazz resultClazz : resultValue.getKey()) {
                                if (!resultClazz.isOk()) {
                                    int i = sheet.getLastRowNum();
                                    for (int k = i; k > q; k--) {
                                        copyRow(xssfWorkbook, sheet, k, k + 1);
                                    }
                                    int cellForFormula = q + 2;
                                    int cellFixForFormula = cellForFormula + resultValue.getValue() - 1;
                                    XSSFRow rowNew = sheet.getRow(q + 1);
                                    Cell cell1 = rowNew.createCell(0);
                                    cell1.setCellValue(resultClazz.getNameRoadOfStationDeparture());                                                  
                                    q++;
                                    resultClazz.setOk(true);
                                }
                            }
                            sheet.addMergedRegion(new CellRangeAddress(q - resultValue.getValue() + 1, q,1, 1));                                          
                        }
                        mapKey.setValue(true);
                    }
                }
            }
        }
    }
}
xssfWorkbook.write(outputStream);
outputStream.flush();
outputStream.close();
Answer 1

Спасибо за помощь. Сделал путем флага в цикле, то есть, изначально флаг был false, сначала проверяю флаг, если false, то добавляю правильное значение, после первого добавления значения ячейки флаг перевожу в true, и далее если он true, то ставлю 0. Сейчас теперь объединяется с нулями и значение в сумме в итоге верное.

READ ALSO
MariaDB не берет текст на русском

MariaDB не берет текст на русском

Работаю с mariaDB из программы на JavaПри попытке ввода русских символов бросается исключение java

171
Java объединение WAV-файлов

Java объединение WAV-файлов

У меня есть метод, который объединяет несколько wav файлов в один:

164
Не подключается шрифт

Не подключается шрифт

Подключаю шрифт, в папке с проектом имеет такой вид и на сайте он работает

172