Добрый день.
jmix 1.5.5
Появилась необходимость проводить пост-обработку отчетов (poi), сформированных с помощью reports-add-on. Словил следующие грабли:
В случае если у ячеек есть границы, то их тип на выходе “портится”.
Минимальный отчет приложил:
test.zip (19.0 КБ)
Посмотрим 2 шаблона и типы ячеек и сравним с типами ячеек из сформированных отчетов:
@Test
fun checkCellType() {
val reportTemplate = reportRunner.byReportCode("test")
.withTemplateCode("template1")
.buildContext().reportTemplate!!
val template = XSSFWorkbook(reportTemplate.content.inputStream())
template.getSheetAt(0).forEach { row ->
row.forEach { cell ->
log.warn("Template1: ${cell.rowIndex}-${cell.columnIndex} - ${cell.cellType.name} - \"${cell.formattedCellValue()}\"")
}
}
template.close()
val reportContent = reportRunner.byReportCode("test")
.withTemplateCode("template1")
.run()
.content
XSSFWorkbook(reportContent.inputStream()).let {
it.getSheetAt(0).forEach { row ->
row.forEach { cell ->
log.warn("Report1: ${cell.rowIndex}-${cell.columnIndex} - ${cell.cellType.name} - \"${cell.formattedCellValue()}\"")
}
}
it.close()
}
val report2Template = reportRunner.byReportCode("test")
.withTemplateCode("template2")
.buildContext().reportTemplate!!
val template2 = XSSFWorkbook(report2Template.content.inputStream())
template2.getSheetAt(0).forEach { row ->
row.forEach { cell ->
log.warn("Template2: ${cell.rowIndex}-${cell.columnIndex} - ${cell.cellType.name} - \"${cell.formattedCellValue()}\"")
}
}
template2.close()
val reportContent2 = reportRunner.byReportCode("test")
.withTemplateCode("template2")
.run()
.content
XSSFWorkbook(reportContent2.inputStream()).let {
it.getSheetAt(0).forEach { row ->
row.forEach { cell ->
log.warn("Report2: ${cell.rowIndex}-${cell.columnIndex} - ${cell.cellType.name} - \"${cell.formattedCellValue()}\"")
}
}
it.close()
}
}
В итоге в логе имеем:
Template1: 0-0 - STRING - "${a}"
Template1: 0-2 - STRING - "${b}"
Report1: 0-0 - NUMERIC - "1"
Report1: 0-1 - STRING - "null"
Report1: 0-2 - NUMERIC - "2"
Здесь у нас уже появилась пустая ячейка, но это терпимо, поскольку тип ячейки строка.
Template2: 0-0 - STRING - "${a}"
Template2: 0-1 - BLANK - "null"
Template2: 0-2 - STRING - "${b}"
Report2: 0-0 - NUMERIC - "1"
Report2: 0-1 - NUMERIC - "0"
Report2: 0-2 - NUMERIC - "2"
Тут ячейка в шаблоне уже есть, видимо, по причине наличия границ. Но вот тип ячейки 0-1 стал числовым и теперь при копировании ячейки/диапазона мы имеем вот такую картину (на другом примере):