Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions fesod-sheet/src/main/java/org/apache/fesod/sheet/FesodSheet.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -330,4 +331,20 @@ 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 readSheetWithColumns(
Integer sheetNo, String sheetName, Integer numRows, List<Integer> columnIndexes) {
return new ExcelReaderSheetBuilder()
.sheetNoIfNotNull(sheetNo)
.sheetNameIfNotNull(sheetName)
.numRowsIfNotNull(numRows)
.includeColumnIndexes(columnIndexes);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,23 @@ public ReadSheet build() {
return readSheet;
}

/**
* Specific columns to read
*
* @param columnIndexes
* @return
*/
public ExcelReaderSheetBuilder includeColumnIndexes(List<Integer> columnIndexes) {
readSheet.setIncludeColumnIndexes(columnIndexes);
return this;
}

public ExcelReaderSheetBuilder includeColumnIndexesIfNotNull(List<Integer> columnIndexes) {
if (Objects.nonNull(columnIndexes)) {
readSheet.setIncludeColumnIndexes(columnIndexes);
}
return this;
}
/**
* Sax read
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

package org.apache.fesod.sheet.read.metadata;

import java.util.List;
import lombok.EqualsAndHashCode;

/**
Expand Down Expand Up @@ -54,6 +55,11 @@ public class ReadSheet extends ReadBasicParameter {
*/
public Integer numRows;

/**
* Specific columns to read (0-based indexes)
*/
private java.util.List<Integer> includeColumnIndexes;

public ReadSheet() {}

public ReadSheet(Integer sheetNo) {
Expand Down Expand Up @@ -111,6 +117,14 @@ public void setVeryHidden(boolean sheetVeryHidden) {
this.sheetVeryHidden = sheetVeryHidden;
}

public List<Integer> getIncludeColumnIndexes() {
return this.includeColumnIndexes;
}

public void setIncludeColumnIndexes(List<Integer> includeColumnIndexes) {
this.includeColumnIndexes = includeColumnIndexes;
}

public void copyBasicParameter(ReadSheet other) {
if (other == null) {
return;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,15 @@
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;
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;
Expand Down Expand Up @@ -247,4 +252,40 @@ void testReadSheet_withAllParams_shouldReturnBuilder() {
ExcelReaderSheetBuilder builder = FesodSheet.readSheet(0, "DataSheet", 100);
Assertions.assertNotNull(builder);
}

@Test
void testReadSheet_withColumnIndexes_shouldConfigureAll() {

java.util.List<java.util.List<String>> 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")));

List<List<Object>> dataList = new ArrayList<>();
dataList.add(Arrays.asList("1", "Alice", "30", "Female"));

FesodSheet.write(tempFile).head(head).sheet("Sheet1").doWrite(dataList);

List<Integer> targetColumns = Arrays.asList(0, 2);

ExcelReaderSheetBuilder builder = FesodSheet.readSheetWithColumns(0, "Sheet1", 100, targetColumns);
ReadSheet configuredSheet = builder.build();
List<Map<Integer, String>> 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("Sheet1", configuredSheet.getSheetName());
Assertions.assertEquals(100, configuredSheet.getNumRows());
Assertions.assertEquals(targetColumns, configuredSheet.getIncludeColumnIndexes());
// data related tests
Assertions.assertNotNull(readResults);
Map<Integer, String> parsedRow = readResults.get(0);
Assertions.assertEquals("1", parsedRow.get(0));
Assertions.assertEquals("Alice", parsedRow.get(1));
Assertions.assertEquals("30", parsedRow.get(2));
}
}