Apache POI - разрешить расчет со строками времени - PullRequest
0 голосов
/ 24 октября 2018

У меня есть лист Excel, который содержит некоторые значения времени.Эти значения являются длительностями, отформатированными в строки.Когда я пытаюсь сделать сумму по этим значениям, я получаю 0 как результат, так как Excel не может делать суммы по строкам.Когда я нажимаю кнопку ввода в строке формул, она становится временем, поэтому сумма работает.Как изменить значение ячейки со строки на значение времени?У меня уже есть формат даты, настроенный как [hh:mm] с DateFormat

. Я начинаю с количества времени, преобразованного в секунды, которое я конвертирую в Duration

Duration clockedDuration = Duration.ofSeconds(clockedSeconds)

Затем я форматирую Duration в строку, используя DurationFormatUtils

DurationFormatUtils.formatDuration(duration.toMillis(), "HH:mm", true)

Затем я устанавливаю значение ячейки для только что созданной строки

c.setCellValue(clockedDuration)

Затем я устанавливаю CellStyleдля того, у которого DataFormat установлено как [hh]:mm

Наконец, я делаю сумму всех значений в этом конкретном столбце (в данном случае B)

c = r.createCell(i++)
c.setCellFormula("SUM(B2:B" + lastRow +")")
c.setCellType(Cell.CELL_TYPE_FORMULA)

Этоэто лист до того, как я нажму кнопку ввода по первому значению в строке (09:52)

enter image description here

Это лист после того, как янажмите кнопку ввода в строке формул

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Я исправил это, разделив секунды на 86400, чтобы получить десятичное значение, а затем использовал [hh]:mm в качестве формата данных.

c.setCellValue(clockedSeconds / 86400)  // 24(hours) * 60(minutes) * 60(seconds) = 86400
0 голосов
/ 24 октября 2018

Просто предчувствие: вы упомянули, что на самом деле используете формулы, и если вы нажмете, введите на листе «сумма работает».Применение формул состоит из двух строк. Помимо установки значения, вам также необходимо отформатировать тип ячейки как формулу:

XSSFRow row = worksheet.getRow(rowIndex);
XSSFCell cell = row.getCell(cellIndex);
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("sum(start:end)");

Редактировать: вы также захотите убедиться, что используетеXSSF-классы

...