From 310afd325dcac54627af33566678bf75c032fd7a Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Mon, 11 Nov 2024 13:05:04 -0300 Subject: [PATCH 1/2] fix: apply excel format for blank cells Fixes #159 --- .../vaadin/addons/gridexporter/ExcelStreamResourceWriter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java index 07962a1..9ecfb10 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java +++ b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java @@ -357,6 +357,9 @@ private void buildCell(Object value, Cell cell, Column column, T item) { } if (value == null) { PoiHelper.setBlank(cell); + if(excelFormat != null) { + applyExcelFormat(cell, excelFormat, cellStyles); + } } else if (value instanceof Number) { excelFormat = (excelFormat!=null)?excelFormat:"0"; cell.setCellValue(((Number) value).doubleValue()); From 98491e18bf11c73683e1010e22644396c0b056a5 Mon Sep 17 00:00:00 2001 From: Martin Lopez Date: Mon, 11 Nov 2024 13:58:40 -0300 Subject: [PATCH 2/2] refactor: reduce cognitive complexity of buildCell method --- .../ExcelStreamResourceWriter.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java index 9ecfb10..6dd1598 100644 --- a/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java +++ b/src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelStreamResourceWriter.java @@ -341,20 +341,9 @@ private CellStyle createOrRetrieveCellStyle(HorizontalAlignment alignment, Cell @SuppressWarnings("unchecked") private void buildCell(Object value, Cell cell, Column column, T item) { - ValueProvider provider = null; - provider = (ValueProvider) ComponentUtil.getData(column, GridExporter.COLUMN_EXCEL_FORMAT_DATA_PROVIDER); - String excelFormat; - Map cellStyles = (Map) ComponentUtil.getData(column, COLUMN_CELLSTYLE_MAP); - if (cellStyles==null) { - cellStyles = new HashMap<>(); - ComponentUtil.setData(column, COLUMN_CELLSTYLE_MAP, cellStyles); - } - if (provider!=null) { - excelFormat = provider.apply(item); - } else { - excelFormat = - (String) ComponentUtil.getData(column, GridExporter.COLUMN_EXCEL_FORMAT_DATA); - } + ValueProvider provider = (ValueProvider) ComponentUtil.getData(column, GridExporter.COLUMN_EXCEL_FORMAT_DATA_PROVIDER); + Map cellStyles = getCellStyles(column); + String excelFormat = getExcelFormat(column, item, provider); if (value == null) { PoiHelper.setBlank(cell); if(excelFormat != null) { @@ -378,6 +367,27 @@ private void buildCell(Object value, Cell cell, Column column, T item) { } } + private String getExcelFormat(Column column, T item, ValueProvider provider) { + String excelFormat; + if (provider!=null) { + excelFormat = provider.apply(item); + } else { + excelFormat = + (String) ComponentUtil.getData(column, GridExporter.COLUMN_EXCEL_FORMAT_DATA); + } + return excelFormat; + } + + @SuppressWarnings("unchecked") + private Map getCellStyles(Column column) { + Map cellStyles = (Map) ComponentUtil.getData(column, COLUMN_CELLSTYLE_MAP); + if (cellStyles==null) { + cellStyles = new HashMap<>(); + ComponentUtil.setData(column, COLUMN_CELLSTYLE_MAP, cellStyles); + } + return cellStyles; + } + private void applyExcelFormat(Cell cell, String excelFormat, Map cellStyles) { DataFormat format = cell.getSheet().getWorkbook().createDataFormat(); if (excelFormat!=null && cellStyles.get(excelFormat)==null) {