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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -45,17 +46,32 @@ 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 = null;
if (xlsReadContext.readSheetHolder() != null
&& xlsReadContext.readSheetHolder().getReadSheet() != null) {
includeColumnIndexes =
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
}

int targetColumnIndex = originalColumnIndex;
if (includeColumnIndexes != null) {
targetColumnIndex = includeColumnIndexes.indexOf(originalColumnIndex);
if (targetColumnIndex == -1) {
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;
}

Expand All @@ -66,7 +82,7 @@ public void processRecord(XlsReadContext xlsReadContext, Record record) {
} 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -43,8 +44,25 @@ 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 = null;
if (xlsReadContext.readSheetHolder() != null
&& xlsReadContext.readSheetHolder().getReadSheet() != null) {
includeColumnIndexes =
xlsReadContext.readSheetHolder().getReadSheet().getColumnIndexes();
}

int targetColumnIndex = originalColumnIndex;
if (includeColumnIndexes != null) {
targetColumnIndex = includeColumnIndexes.indexOf(originalColumnIndex);
if (targetColumnIndex == -1) {
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()
Expand All @@ -59,7 +77,7 @@ public void processRecord(XlsReadContext xlsReadContext, Record record) {
.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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,35 @@ void testReadSheet_withAllParams_shouldReturnBuilder() {
Assertions.assertNotNull(builder);
}

@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_shouldConfigureAll() {

Expand Down