From 0b5e97d596268f163aa00adb24768c45a54c1d06 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 22 Jul 2024 14:26:45 -0500 Subject: [PATCH] Bugfix, where sheet contents could get out-of-sync with their labels (e.g., see use-case with some summary views before their corresponding table views) --- .../poi/ExcelPoiBasedStreamingExportStreamer.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/excel/poi/ExcelPoiBasedStreamingExportStreamer.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/excel/poi/ExcelPoiBasedStreamingExportStreamer.java index 1ce29911..ab175b86 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/excel/poi/ExcelPoiBasedStreamingExportStreamer.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/reporting/excel/poi/ExcelPoiBasedStreamingExportStreamer.java @@ -124,10 +124,11 @@ public class ExcelPoiBasedStreamingExportStreamer implements ExportStreamerInter private Writer activeSheetWriter = null; private StreamedSheetWriter sheetWriter = null; - private QReportView currentView = null; - private Map> fieldsPerView = new HashMap<>(); - private Map rowsPerView = new HashMap<>(); - private Map labelViewsByName = new HashMap<>(); + private QReportView currentView = null; + private Map> fieldsPerView = new HashMap<>(); + private Map rowsPerView = new HashMap<>(); + private Map labelViewsByName = new HashMap<>(); + private Map sheetReferenceByViewName = new HashMap<>(); @@ -180,6 +181,7 @@ public class ExcelPoiBasedStreamingExportStreamer implements ExportStreamerInter String sheetReference = sheet.getPackagePart().getPartName().getName().substring(1); sheetMapByExcelReference.put(sheetReference, sheet); sheetMapByViewName.put(view.getName(), sheet); + sheetReferenceByViewName.put(view.getName(), sheetReference); sheetCounter++; } @@ -446,7 +448,7 @@ public class ExcelPoiBasedStreamingExportStreamer implements ExportStreamerInter // - with a new output stream writer // // - and with a SpreadsheetWriter // ////////////////////////////////////////// - zipOutputStream.putNextEntry(new ZipEntry("xl/worksheets/sheet" + this.sheetIndex++ + ".xml")); + zipOutputStream.putNextEntry(new ZipEntry(sheetReferenceByViewName.get(view.getName()))); activeSheetWriter = new OutputStreamWriter(zipOutputStream); sheetWriter = new StreamedSheetWriter(activeSheetWriter);