При записи в файл 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();
Спасибо за помощь. Сделал путем флага в цикле, то есть, изначально флаг был false, сначала проверяю флаг, если false, то добавляю правильное значение, после первого добавления значения ячейки флаг перевожу в true, и далее если он true, то ставлю 0. Сейчас теперь объединяется с нулями и значение в сумме в итоге верное.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Работаю с mariaDB из программы на JavaПри попытке ввода русских символов бросается исключение java
Подключаю шрифт, в папке с проектом имеет такой вид и на сайте он работает