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();