This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/main by this push:
     new b637563cd96 CAUSEWAY-3888: uses POI's SXSSFWorkbook over XSSFWorkbook
b637563cd96 is described below

commit b637563cd960e8ca85f6d4eb7dae7df59fb5f06f
Author: andi-huber <[email protected]>
AuthorDate: Mon May 5 11:37:34 2025 +0200

    CAUSEWAY-3888: uses POI's SXSSFWorkbook over XSSFWorkbook
    
    The former is optimized for writing streams of data and uses less
    memory.
---
 .../extensions/tabular/excel/exporter/ExcelFileWriter.java |  9 ++++++---
 .../tabular/excel/exporter/ExcelImageHandler.java          | 14 +++++++-------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelFileWriter.java
 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelFileWriter.java
index 6e607d1b999..cba584659bc 100644
--- 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelFileWriter.java
+++ 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelFileWriter.java
@@ -29,8 +29,8 @@
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.jspecify.annotations.Nullable;
 
 import org.apache.causeway.applib.value.Blob;
@@ -84,7 +84,7 @@ static CustomCellStyle nullToDefault(final @Nullable 
CustomCellStyle customCellS
 
     @SneakyThrows
     public void write(final TabularModel tabular, final File tempFile) {
-        try(final Workbook wb = new XSSFWorkbook()) {
+        try(final Workbook wb = new SXSSFWorkbook()) {
             tabular.sheets().forEach(sheet->writeSheet(wb, sheet));
             try(var fos = new FileOutputStream(tempFile)) {
                 wb.write(fos);
@@ -124,6 +124,9 @@ private void writeSheet(final Workbook wb, final 
TabularModel.TabularSheet tabul
         Row row;
         
         var sheet = wb.createSheet(sheetName);
+        if(sheet instanceof SXSSFSheet sxssfSheet) {
+            sxssfSheet.trackAllColumnsForAutoSizing();
+        }
         var cellWriter = new ExcelCellWriter(5, new ExcelImageHandler(sheet));
         
         var cellStyleProvider = CellStyleProvider.create(wb, options);
diff --git 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelImageHandler.java
 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelImageHandler.java
index 7c768a4ad70..2a34d4f65ab 100644
--- 
a/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelImageHandler.java
+++ 
b/extensions/vw/tabular/excel/src/main/java/org/apache/causeway/extensions/tabular/excel/exporter/ExcelImageHandler.java
@@ -23,10 +23,10 @@
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.streaming.SXSSFDrawing;
+import org.apache.poi.xssf.streaming.SXSSFPicture;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.apache.poi.xssf.usermodel.XSSFDrawing;
-import org.apache.poi.xssf.usermodel.XSSFPicture;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 import org.apache.causeway.commons.internal.image._Images;
 
@@ -35,11 +35,11 @@
  * @see <a href="https://www.baeldung.com/java-add-image-excel";>baeldung</a>
  */
 record ExcelImageHandler(
-    XSSFWorkbook workbook,
-    XSSFDrawing drawing) {
+    SXSSFWorkbook workbook,
+    SXSSFDrawing drawing) {
     
     ExcelImageHandler(Sheet sheet) {
-        this((XSSFWorkbook) sheet.getWorkbook(), (XSSFDrawing) 
sheet.createDrawingPatriarch());
+        this((SXSSFWorkbook) sheet.getWorkbook(), (SXSSFDrawing) 
sheet.createDrawingPatriarch());
     }
 
     void addImage(BufferedImage value, Cell cell) {
@@ -59,7 +59,7 @@ void addImage(BufferedImage value, Cell cell) {
     
     // -- HELPER
     
-    private XSSFPicture addImage(BufferedImage image, int rowIndex, int 
colIndex) {
+    private SXSSFPicture addImage(BufferedImage image, int rowIndex, int 
colIndex) {
         var imgId = 
workbook.addPicture(_Images.toBytes(_Images.resizeToMaxHeight(image, 120)), 
Workbook.PICTURE_TYPE_PNG);
         var anchor = new XSSFClientAnchor();
         

Reply via email to