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

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


The following commit(s) were added to refs/heads/main by this push:
     new c8224b88 feat: add support for column-based reading of XLS files (#981)
c8224b88 is described below

commit c8224b88de26a2daa54e70466556b9ef809bb7eb
Author: Selim S. <[email protected]>
AuthorDate: Wed Aug 12 12:51:57 2026 +0100

    feat: add support for column-based reading of XLS files (#981)
    
    * feature: number and sstlabel with column support
    
    * remove null checks for sheet holder and sheet
    
    * feat: adding filtering capability for columns for additional typeset: 
formula, bool, rk, blank etc
    
    * fix CI: missing import
    
    * fix CI : add missing imports
    
    * address reviewing comments : revert NOTE
    
    * fix: code style and restore the missing test
    
    ---------
    
    Co-authored-by: Selim Soufargi <[email protected]~>
    Co-authored-by: Bengbengbalabalabeng <[email protected]>
---
 .../analysis/v03/handlers/BlankRecordHandler.java  | 15 ++++-
 .../v03/handlers/BoolErrRecordHandler.java         | 16 ++++-
 .../analysis/v03/handlers/DummyRecordHandler.java  | 14 +++-
 .../v03/handlers/FormulaRecordHandler.java         | 24 +++++--
 .../analysis/v03/handlers/LabelRecordHandler.java  | 16 ++++-
 .../v03/handlers/LabelSstRecordHandler.java        | 22 +++++--
 .../analysis/v03/handlers/NumberRecordHandler.java | 18 +++++-
 .../analysis/v03/handlers/RkRecordHandler.java     | 15 ++++-
 .../org/apache/fesod/sheet/FesodSheetTest.java     | 75 ++++++++++++++++++++++
 9 files changed, 197 insertions(+), 18 deletions(-)

diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BlankRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BlankRecordHandler.java
index 07aa6884..2cf1782e 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BlankRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BlankRecordHandler.java
@@ -25,6 +25,7 @@
 
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
+import java.util.List;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
 import org.apache.fesod.sheet.metadata.data.ReadCellData;
@@ -39,9 +40,21 @@ public class BlankRecordHandler extends 
AbstractXlsRecordHandler implements Igno
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         BlankRecord br = (BlankRecord) record;
+        int originalColumnIndex = br.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
         xlsReadContext
                 .xlsReadSheetHolder()
                 .getCellMap()
-                .put((int) br.getColumn(), 
ReadCellData.newEmptyInstance(br.getRow(), (int) br.getColumn()));
+                .put(targetColumnIndex, 
ReadCellData.newEmptyInstance(br.getRow(), targetColumnIndex));
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BoolErrRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BoolErrRecordHandler.java
index eea2b15e..4fe379ca 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BoolErrRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/BoolErrRecordHandler.java
@@ -25,6 +25,7 @@
 
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
+import java.util.List;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
 import org.apache.fesod.sheet.enums.RowTypeEnum;
@@ -40,11 +41,22 @@ public class BoolErrRecordHandler extends 
AbstractXlsRecordHandler implements Ig
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         BoolErrRecord ber = (BoolErrRecord) record;
+        int originalColumnIndex = ber.getColumn();
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
         xlsReadContext
                 .xlsReadSheetHolder()
                 .getCellMap()
-                .put((int) ber.getColumn(), 
ReadCellData.newInstance(ber.getBooleanValue(), ber.getRow(), (int)
-                        ber.getColumn()));
+                .put(targetColumnIndex, 
ReadCellData.newInstance(ber.getBooleanValue(), ber.getRow(), (int)
+                        targetColumnIndex));
         xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/DummyRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/DummyRecordHandler.java
index 9035c551..18cc1c02 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/DummyRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/DummyRecordHandler.java
@@ -26,6 +26,7 @@
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
 import java.util.LinkedHashMap;
+import java.util.List;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
 import org.apache.fesod.sheet.enums.RowTypeEnum;
@@ -58,11 +59,22 @@ public class DummyRecordHandler extends 
AbstractXlsRecordHandler implements Igno
             xlsReadSheetHolder.setTempRowType(RowTypeEnum.EMPTY);
         } else if (record instanceof MissingCellDummyRecord) {
             MissingCellDummyRecord mcdr = (MissingCellDummyRecord) record;
+            int originalColumnIndex = mcdr.getColumn();
+            List<Integer> includeColumnIndexes =
+                    
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+            int targetColumnIndex = originalColumnIndex;
+            if (includeColumnIndexes != null) {
+                targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+                if (targetColumnIndex < 0) {
+                    return;
+                }
+            }
             // Some abnormal XLS, in the case of data already exist, or there 
will be a "MissingCellDummyRecord"
             // records, so if the existing data, empty data is ignored
             xlsReadSheetHolder
                     .getCellMap()
-                    .putIfAbsent(mcdr.getColumn(), 
ReadCellData.newEmptyInstance(mcdr.getRow(), mcdr.getColumn()));
+                    .putIfAbsent(targetColumnIndex, 
ReadCellData.newEmptyInstance(mcdr.getRow(), targetColumnIndex));
         }
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/FormulaRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/FormulaRecordHandler.java
index b5a2218b..229a188a 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/FormulaRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/FormulaRecordHandler.java
@@ -26,6 +26,7 @@
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Map;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
@@ -53,10 +54,23 @@ public class FormulaRecordHandler extends 
AbstractXlsRecordHandler implements Ig
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         FormulaRecord frec = (FormulaRecord) record;
+        int originalColumnIndex = frec.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
+
         Map<Integer, Cell> cellMap = 
xlsReadContext.xlsReadSheetHolder().getCellMap();
         ReadCellData<?> tempCellData = new ReadCellData<>();
         tempCellData.setRowIndex(frec.getRow());
-        tempCellData.setColumnIndex((int) frec.getColumn());
+        tempCellData.setColumnIndex(targetColumnIndex);
         CellType cellType = CellType.forInt(frec.getCachedResultType());
         String formulaValue = null;
         try {
@@ -98,21 +112,21 @@ public class FormulaRecordHandler extends 
AbstractXlsRecordHandler implements Ig
                                 .getGlobalConfiguration()
                                 .getLocale()));
                 tempCellData.setDataFormatData(dataFormatData);
-                cellMap.put((int) frec.getColumn(), tempCellData);
+                cellMap.put(targetColumnIndex, tempCellData);
                 break;
             case ERROR:
                 tempCellData.setType(CellDataTypeEnum.ERROR);
                 tempCellData.setStringValue(ERROR);
-                cellMap.put((int) frec.getColumn(), tempCellData);
+                cellMap.put(targetColumnIndex, tempCellData);
                 break;
             case BOOLEAN:
                 tempCellData.setType(CellDataTypeEnum.BOOLEAN);
                 tempCellData.setBooleanValue(frec.getCachedBooleanValue());
-                cellMap.put((int) frec.getColumn(), tempCellData);
+                cellMap.put(targetColumnIndex, tempCellData);
                 break;
             default:
                 tempCellData.setType(CellDataTypeEnum.EMPTY);
-                cellMap.put((int) frec.getColumn(), tempCellData);
+                cellMap.put(targetColumnIndex, tempCellData);
                 break;
         }
     }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelRecordHandler.java
index 0196a10b..0df77a3b 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelRecordHandler.java
@@ -25,6 +25,7 @@
 
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
+import java.util.List;
 import org.apache.fesod.common.util.StringUtils;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
@@ -41,6 +42,19 @@ public class LabelRecordHandler extends 
AbstractXlsRecordHandler implements Igno
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         LabelRecord lrec = (LabelRecord) record;
+        int originalColumnIndex = lrec.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
+
         String data = lrec.getValue();
         if (data != null) {
             GlobalConfiguration globalConfiguration =
@@ -54,7 +68,7 @@ public class LabelRecordHandler extends 
AbstractXlsRecordHandler implements Igno
         xlsReadContext
                 .xlsReadSheetHolder()
                 .getCellMap()
-                .put((int) lrec.getColumn(), ReadCellData.newInstance(data, 
lrec.getRow(), (int) lrec.getColumn()));
+                .put(targetColumnIndex, ReadCellData.newInstance(data, 
lrec.getRow(), targetColumnIndex));
         xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelSstRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelSstRecordHandler.java
index 91ec669a..c718b85c 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelSstRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/LabelSstRecordHandler.java
@@ -25,6 +25,7 @@
 
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
+import java.util.List;
 import java.util.Map;
 import org.apache.fesod.common.util.StringUtils;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
@@ -45,17 +46,28 @@ public class LabelSstRecordHandler extends 
AbstractXlsRecordHandler implements I
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         LabelSSTRecord lsrec = (LabelSSTRecord) record;
+        int originalColumnIndex = lsrec.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
+
         ReadCache readCache = 
xlsReadContext.readWorkbookHolder().getReadCache();
         Map<Integer, Cell> cellMap = 
xlsReadContext.xlsReadSheetHolder().getCellMap();
         if (readCache == null) {
-            cellMap.put(
-                    (int) lsrec.getColumn(), 
ReadCellData.newEmptyInstance(lsrec.getRow(), (int) lsrec.getColumn()));
+            cellMap.put(targetColumnIndex, 
ReadCellData.newEmptyInstance(lsrec.getRow(), targetColumnIndex));
             return;
         }
         String data = readCache.get(lsrec.getSSTIndex());
         if (data == null) {
-            cellMap.put(
-                    (int) lsrec.getColumn(), 
ReadCellData.newEmptyInstance(lsrec.getRow(), (int) lsrec.getColumn()));
+            cellMap.put(targetColumnIndex, 
ReadCellData.newEmptyInstance(lsrec.getRow(), targetColumnIndex));
             return;
         }
 
@@ -66,7 +78,7 @@ public class LabelSstRecordHandler extends 
AbstractXlsRecordHandler implements I
         } else if (globalConfiguration.getAutoTrim()) {
             data = data.trim();
         }
-        cellMap.put((int) lsrec.getColumn(), ReadCellData.newInstance(data, 
lsrec.getRow(), (int) lsrec.getColumn()));
+        cellMap.put(targetColumnIndex, ReadCellData.newInstance(data, 
lsrec.getRow(), targetColumnIndex));
         xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/NumberRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/NumberRecordHandler.java
index 23cda011..ec0ea97b 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/NumberRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/NumberRecordHandler.java
@@ -26,6 +26,7 @@
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
 import java.math.BigDecimal;
+import java.util.List;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.constant.BuiltinFormats;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
@@ -43,8 +44,21 @@ public class NumberRecordHandler extends 
AbstractXlsRecordHandler implements Ign
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         NumberRecord nr = (NumberRecord) record;
+        int originalColumnIndex = nr.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
+
         ReadCellData<?> cellData =
-                
ReadCellData.newInstanceOriginal(BigDecimal.valueOf(nr.getValue()), 
nr.getRow(), (int) nr.getColumn());
+                
ReadCellData.newInstanceOriginal(BigDecimal.valueOf(nr.getValue()), 
nr.getRow(), targetColumnIndex);
         short dataFormat = (short) xlsReadContext
                 .xlsReadWorkbookHolder()
                 .getFormatTrackingHSSFListener()
@@ -59,7 +73,7 @@ public class NumberRecordHandler extends 
AbstractXlsRecordHandler implements Ign
                         .getFormatString(nr),
                 
xlsReadContext.readSheetHolder().getGlobalConfiguration().getLocale()));
         cellData.setDataFormatData(dataFormatData);
-        xlsReadContext.xlsReadSheetHolder().getCellMap().put((int) 
nr.getColumn(), cellData);
+        
xlsReadContext.xlsReadSheetHolder().getCellMap().put(targetColumnIndex, 
cellData);
         xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA);
     }
 }
diff --git 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/RkRecordHandler.java
 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/RkRecordHandler.java
index 99eaa087..502c9f34 100644
--- 
a/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/RkRecordHandler.java
+++ 
b/fesod-sheet/src/main/java/org/apache/fesod/sheet/analysis/v03/handlers/RkRecordHandler.java
@@ -25,6 +25,7 @@
 
 package org.apache.fesod.sheet.analysis.v03.handlers;
 
+import java.util.List;
 import org.apache.fesod.sheet.analysis.v03.IgnorableXlsRecordHandler;
 import org.apache.fesod.sheet.context.xls.XlsReadContext;
 import org.apache.fesod.sheet.metadata.data.ReadCellData;
@@ -39,9 +40,21 @@ public class RkRecordHandler extends 
AbstractXlsRecordHandler implements Ignorab
     @Override
     public void processRecord(XlsReadContext xlsReadContext, Record record) {
         RKRecord re = (RKRecord) record;
+        int originalColumnIndex = re.getColumn();
+
+        List<Integer> includeColumnIndexes =
+                
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
+
+        int targetColumnIndex = originalColumnIndex;
+        if (includeColumnIndexes != null) {
+            targetColumnIndex = 
includeColumnIndexes.indexOf(originalColumnIndex);
+            if (targetColumnIndex < 0) {
+                return;
+            }
+        }
         xlsReadContext
                 .xlsReadSheetHolder()
                 .getCellMap()
-                .put((int) re.getColumn(), 
ReadCellData.newEmptyInstance(re.getRow(), (int) re.getColumn()));
+                .put(targetColumnIndex, 
ReadCellData.newEmptyInstance(re.getRow(), targetColumnIndex));
     }
 }
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 8f267eb7..bcc6ad3e 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
@@ -27,6 +27,8 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.io.FileUtils;
@@ -316,4 +318,77 @@ class FesodSheetTest {
         Assertions.assertEquals("1", parsedRow.get(0));
         Assertions.assertEquals("30", parsedRow.get(1));
     }
+
+    @Test
+    void testReadSheet_withColumnIndexes_xlsFormat() {
+        File xlsFile = tempDir.resolve("test.xls").toFile();
+
+        List<List<String>> head = new ArrayList<>();
+        head.add(Arrays.asList("ID"));
+        head.add(Arrays.asList("Name"));
+        head.add(Arrays.asList("Age"));
+        head.add(Arrays.asList("Gender"));
+
+        List<List<Object>> dataList = new ArrayList<>();
+        dataList.add(Arrays.asList("1", "Alice", "30", "Female"));
+
+        FesodSheet.write(xlsFile).head(head).sheet("Sheet1").doWrite(dataList);
+
+        List<Integer> targetColumns = Arrays.asList(0, 2);
+
+        List<Map<Integer, String>> readResults = FesodSheet.read(xlsFile)
+                .sheet(0)
+                .includeColumnIndexes(targetColumns)
+                .doReadSync();
+
+        Assertions.assertNotNull(readResults);
+        Map<Integer, String> parsedRow = readResults.get(0);
+        Assertions.assertEquals(2, parsedRow.size(), "Should only contain 2 
filtered columns");
+        Assertions.assertEquals("1", parsedRow.get(0));
+        Assertions.assertEquals("30", parsedRow.get(1));
+    }
+
+    @Test
+    void testReadSheet_withColumnIndexes_xlsFormat_allCellTypes() {
+        File xlsFile = tempDir.resolve("test_all_types.xls").toFile();
+
+        List<List<String>> head = new ArrayList<>();
+        head.add(Arrays.asList("StringCol"));
+        head.add(Arrays.asList("NumberCol"));
+        head.add(Arrays.asList("BooleanCol"));
+        head.add(Arrays.asList("DateCol"));
+        head.add(Arrays.asList("FormulaCol"));
+        head.add(Arrays.asList("BlankCol"));
+
+        List<Object> row = new ArrayList<>();
+        row.add("Hello Fesod");
+        row.add(100.50);
+        row.add(true);
+        row.add(new Date());
+        row.add("=SUM(10, 20)");
+        row.add(null);
+
+        List<List<Object>> dataList = Collections.singletonList(row);
+
+        FesodSheet.write(xlsFile).head(head).sheet("Sheet1").doWrite(dataList);
+
+        List<Integer> targetColumns = Arrays.asList(0, 2, 4);
+
+        List<Map<Integer, String>> readResults = FesodSheet.read(xlsFile)
+                .sheet(0)
+                .includeColumnIndexes(targetColumns)
+                .doReadSync();
+
+        Assertions.assertNotNull(readResults);
+        Assertions.assertEquals(1, readResults.size());
+
+        Map<Integer, String> parsedRow = readResults.get(0);
+
+        Assertions.assertEquals(3, parsedRow.size(), "Should only contain the 
3 requested target columns");
+
+        Assertions.assertEquals("Hello Fesod", parsedRow.get(0), "Target 0 
should contain String from Col 0");
+        Assertions.assertEquals("TRUE", parsedRow.get(1).toUpperCase(), 
"Target 1 should contain Boolean from Col 2");
+
+        Assertions.assertNotNull(parsedRow.get(2), "Target 2 should contain 
Formula result from Col 4");
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to