From cfdb817353e64d62e6728be61c114686a178d3ab Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Sun, 5 Jul 2026 10:43:06 +0200 Subject: [PATCH 1/5] read a sheet accounting for a column index limit --- .../java/org/apache/fesod/sheet/FesodSheet.java | 13 +++++++++++++ .../read/builder/ExcelReaderSheetBuilder.java | 17 +++++++++++++++++ .../fesod/sheet/read/metadata/ReadSheet.java | 15 +++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java index 2422718a3..803db674c 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java @@ -330,4 +330,17 @@ public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, String sheetNam .sheetNameIfNotNull(sheetName) .numRowsIfNotNull(numRows); } + + /** + * Build excel the 'readSheet' targeting specific column indexes. + * + * @param sheetNo Index of sheet, 0 base. + * @param columnIndexes Specific columns to read (e.g., [0, 2] for Column A and C). + * @return Excel sheet reader builder. + */ + public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, java.util.List columnIndexes) { + return new ExcelReaderSheetBuilder() + .sheetNoIfNotNull(sheetNo) + .includeColumnIndexes(columnIndexes); + } } diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/builder/ExcelReaderSheetBuilder.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/builder/ExcelReaderSheetBuilder.java index 8c39c96ee..4f00e9ba6 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/builder/ExcelReaderSheetBuilder.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/builder/ExcelReaderSheetBuilder.java @@ -112,6 +112,23 @@ public ReadSheet build() { return readSheet; } + /** + * Specific columns to read + * + * @param columnIndexes + * @return + */ + public ExcelReaderSheetBuilder includeColumnIndexes(List columnIndexes) { + readSheet.setIncludeColumnIndexes(columnIndexes); + return this; + } + + public ExcelReaderSheetBuilder includeColumnIndexesIfNotNull(List columnIndexes) { + if (Objects.nonNull(columnIndexes)) { + readSheet.setIncludeColumnIndexes(columnIndexes); + } + return this; + } /** * Sax read */ diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java index 9e9f644eb..1e7557ce4 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java @@ -26,6 +26,7 @@ package org.apache.fesod.sheet.read.metadata; import lombok.EqualsAndHashCode; +import java.util.List; /** * Read sheet @@ -54,6 +55,11 @@ public class ReadSheet extends ReadBasicParameter { */ public Integer numRows; + /** + * Specific columns to read (0-based indexes) + */ + private java.util.List includeColumnIndexes; + public ReadSheet() {} public ReadSheet(Integer sheetNo) { @@ -111,6 +117,14 @@ public void setVeryHidden(boolean sheetVeryHidden) { this.sheetVeryHidden = sheetVeryHidden; } + public List getIncludeColumnIndexes() { + return this.includeColumnIndexes; + } + + public void setIncludeColumnIndexes(java.util.List includeColumnIndexes) { + this.includeColumnIndexes = columnIndexes; + } + public void copyBasicParameter(ReadSheet other) { if (other == null) { return; @@ -126,6 +140,7 @@ public void copyBasicParameter(ReadSheet other) { this.setNumRows(other.getNumRows()); this.setHidden(other.isHidden()); this.setVeryHidden(other.isVeryHidden()); + this.setIncludeColumnIndexes(other.getIncludeColumnIndexes()); } @Override From f907ae183e8aec9254bf45b7e87239f55ac455bc Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Sun, 5 Jul 2026 12:53:49 +0200 Subject: [PATCH 2/5] feat(sheet): add support for reading sheet with specific column indexes: add test --- .../org/apache/fesod/sheet/FesodSheetTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java index 44a8bee94..5384edca9 100644 --- a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java +++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java @@ -24,6 +24,8 @@ import java.io.OutputStream; import java.lang.reflect.Method; import java.nio.file.Path; +import java.util.List; +import java.util.Arrays; import org.apache.fesod.sheet.read.builder.ExcelReaderBuilder; import org.apache.fesod.sheet.read.builder.ExcelReaderSheetBuilder; import org.apache.fesod.sheet.read.listener.ReadListener; @@ -247,4 +249,20 @@ void testReadSheet_withAllParams_shouldReturnBuilder() { ExcelReaderSheetBuilder builder = FesodSheet.readSheet(0, "DataSheet", 100); Assertions.assertNotNull(builder); } + + @Test + void testReadSheet_withColumnIndexes_shouldConfigureAll() { + + List targetColumns = Arrays.asList(0, 2); + + ExcelReaderSheetBuilder builder = FesodSheet.readSheet(1, targetColumns); + + Assertions.assertNotNull(builder, "Builder should not be null"); + + ReadSheet configuredSheet = builder.build(); + Assertions.assertNotNull(configuredSheet, "The internal ReadSheet should be created"); + + Assertions.assertEquals(1, configuredSheet.getSheetNo()); + Assertions.assertEquals(targetColumns, configuredSheet.getIncludeColumnIndexes()); + } } From 12ac741b401427b715027915815cadcb16ea8e5c Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Sun, 5 Jul 2026 14:23:38 +0200 Subject: [PATCH 3/5] feat(sheet): spotless:apply and CI fixes --- .../src/main/java/org/apache/fesod/sheet/FesodSheet.java | 5 ++++- .../org/apache/fesod/sheet/read/metadata/ReadSheet.java | 6 +++--- .../test/java/org/apache/fesod/sheet/FesodSheetTest.java | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java index 803db674c..230038399 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java @@ -338,9 +338,12 @@ public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, String sheetNam * @param columnIndexes Specific columns to read (e.g., [0, 2] for Column A and C). * @return Excel sheet reader builder. */ - public static ExcelReaderSheetBuilder readSheet(Integer sheetNo, java.util.List columnIndexes) { + public static ExcelReaderSheetBuilder readSheetWithColumns( + Integer sheetNo, String sheetName, Integer numRows, List columnIndexes) { return new ExcelReaderSheetBuilder() .sheetNoIfNotNull(sheetNo) + .sheetNameIfNotNull(sheetName) + .numRowsIfNotNull(numRows) .includeColumnIndexes(columnIndexes); } } diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java index 1e7557ce4..70052a101 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/read/metadata/ReadSheet.java @@ -25,8 +25,8 @@ package org.apache.fesod.sheet.read.metadata; -import lombok.EqualsAndHashCode; import java.util.List; +import lombok.EqualsAndHashCode; /** * Read sheet @@ -121,8 +121,8 @@ public List getIncludeColumnIndexes() { return this.includeColumnIndexes; } - public void setIncludeColumnIndexes(java.util.List includeColumnIndexes) { - this.includeColumnIndexes = columnIndexes; + public void setIncludeColumnIndexes(List includeColumnIndexes) { + this.includeColumnIndexes = includeColumnIndexes; } public void copyBasicParameter(ReadSheet other) { diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java index 5384edca9..8fb60d040 100644 --- a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java +++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java @@ -24,8 +24,8 @@ import java.io.OutputStream; import java.lang.reflect.Method; import java.nio.file.Path; -import java.util.List; import java.util.Arrays; +import java.util.List; import org.apache.fesod.sheet.read.builder.ExcelReaderBuilder; import org.apache.fesod.sheet.read.builder.ExcelReaderSheetBuilder; import org.apache.fesod.sheet.read.listener.ReadListener; @@ -255,7 +255,7 @@ void testReadSheet_withColumnIndexes_shouldConfigureAll() { List targetColumns = Arrays.asList(0, 2); - ExcelReaderSheetBuilder builder = FesodSheet.readSheet(1, targetColumns); + ExcelReaderSheetBuilder builder = FesodSheet.readSheetWithColumns(1, "DataSheet", 100, targetColumns); Assertions.assertNotNull(builder, "Builder should not be null"); @@ -263,6 +263,8 @@ void testReadSheet_withColumnIndexes_shouldConfigureAll() { Assertions.assertNotNull(configuredSheet, "The internal ReadSheet should be created"); Assertions.assertEquals(1, configuredSheet.getSheetNo()); + Assertions.assertEquals("DataSheet", configuredSheet.getSheetName()); + Assertions.assertEquals(100, configuredSheet.getNumRows()); Assertions.assertEquals(targetColumns, configuredSheet.getIncludeColumnIndexes()); } } From 6e5f7ec36d215a592e03500f6a2d8e2b3227dccf Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Sun, 5 Jul 2026 15:05:42 +0200 Subject: [PATCH 4/5] feat(sheet): spotless:apply and add test with data --- .../org/apache/fesod/sheet/FesodSheet.java | 1 + .../apache/fesod/sheet/FesodSheetTest.java | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java index 230038399..d46cde86e 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.util.List; import org.apache.fesod.sheet.read.builder.ExcelReaderBuilder; import org.apache.fesod.sheet.read.builder.ExcelReaderSheetBuilder; import org.apache.fesod.sheet.read.listener.ReadListener; diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java index 8fb60d040..398840389 100644 --- a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java +++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java @@ -24,8 +24,10 @@ import java.io.OutputStream; import java.lang.reflect.Method; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import org.apache.fesod.sheet.read.builder.ExcelReaderBuilder; import org.apache.fesod.sheet.read.builder.ExcelReaderSheetBuilder; import org.apache.fesod.sheet.read.listener.ReadListener; @@ -253,18 +255,36 @@ void testReadSheet_withAllParams_shouldReturnBuilder() { @Test void testReadSheet_withColumnIndexes_shouldConfigureAll() { - List targetColumns = Arrays.asList(0, 2); + java.util.List> head = new java.util.ArrayList<>(); + head.add(new ArrayList<>(Arrays.asList("ID"))); + head.add(new ArrayList<>(Arrays.asList("Name"))); + head.add(new ArrayList<>(Arrays.asList("Age"))); + head.add(new ArrayList<>(Arrays.asList("Gender"))); - ExcelReaderSheetBuilder builder = FesodSheet.readSheetWithColumns(1, "DataSheet", 100, targetColumns); + List> dataList = new ArrayList<>(); + dataList.add(Arrays.asList("1", "Alice", "30", "Female")); - Assertions.assertNotNull(builder, "Builder should not be null"); + FesodSheet.write(tempFile).head(head).sheet("Sheet1").doWrite(dataList); + + List targetColumns = Arrays.asList(0, 2); + ExcelReaderSheetBuilder builder = FesodSheet.readSheetWithColumns(0, "Sheet1", 100, targetColumns); ReadSheet configuredSheet = builder.build(); - Assertions.assertNotNull(configuredSheet, "The internal ReadSheet should be created"); + List> readResults = + FesodSheet.read(tempFile).sheet(configuredSheet).doReadSync(); + // builder tests + Assertions.assertNotNull(builder, "Builder should not be null"); + Assertions.assertNotNull(configuredSheet, "The internal ReadSheet should be created"); Assertions.assertEquals(1, configuredSheet.getSheetNo()); - Assertions.assertEquals("DataSheet", configuredSheet.getSheetName()); + Assertions.assertEquals("Sheet1", configuredSheet.getSheetName()); Assertions.assertEquals(100, configuredSheet.getNumRows()); Assertions.assertEquals(targetColumns, configuredSheet.getIncludeColumnIndexes()); + // data related tests + Assertions.assertNotNull(readResults); + Map parsedRow = readResults.get(0); + Assertions.assertEquals("1", parsedRow.get(0)); + Assertions.assertEquals("Alice", parsedRow.get(1)); + Assertions.assertEquals("30", parsedRow.get(2)); } } From 2f71ecf9832b3f2f23edd173c441616eec0d0c6f Mon Sep 17 00:00:00 2001 From: Selim Soufargi Date: Mon, 6 Jul 2026 00:05:39 +0200 Subject: [PATCH 5/5] feat(sheet): add import --- .../src/test/java/org/apache/fesod/sheet/FesodSheetTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java index 398840389..912afe5cc 100644 --- a/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java +++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/FesodSheetTest.java @@ -32,6 +32,7 @@ import org.apache.fesod.sheet.read.builder.ExcelReaderSheetBuilder; import org.apache.fesod.sheet.read.listener.ReadListener; import org.apache.fesod.sheet.read.metadata.ReadWorkbook; +import org.apache.fesod.sheet.read.metadata.ReadSheet; import org.apache.fesod.sheet.testkit.Tags; import org.apache.fesod.sheet.write.builder.ExcelWriterBuilder; import org.apache.fesod.sheet.write.builder.ExcelWriterSheetBuilder;