Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -223,21 +223,14 @@ private void dealRecord(CSVRecord record, int rowIndex) {
csvReadContext.csvReadWorkbookHolder().globalConfiguration().getAutoTrim();
Boolean autoStrip =
csvReadContext.csvReadWorkbookHolder().globalConfiguration().getAutoStrip();
List<Integer> includeColumnIndexes =
csvReadContext.readSheetHolder().getReadSheet().getColumnIndexes();

while (cellIterator.hasNext()) {
String cellString = cellIterator.next();
int currentColumnIndex = columnIndex++;
int targetColumnIndex;

if (includeColumnIndexes == null) {
targetColumnIndex = currentColumnIndex;
} else {
targetColumnIndex = includeColumnIndexes.indexOf(currentColumnIndex);
if (targetColumnIndex < 0) {
continue;
}
Integer targetColumnIndex = csvReadContext.readSheetHolder().determineTargetColumnIndex(currentColumnIndex);
if (targetColumnIndex == null) {
continue;
}

ReadCellData<String> readCellData = new ReadCellData<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

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;
Expand All @@ -40,18 +39,12 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(br.getColumn());
if (targetColumnIndex == null) {
return;
}

xlsReadContext
.xlsReadSheetHolder()
.getCellMap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

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.CellDataTypeEnum;
Expand All @@ -43,16 +42,10 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(ber.getColumn());
if (targetColumnIndex == null) {
return;
}
ReadCellData<?> cellData;
if (ber.isError()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
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;
Expand Down Expand Up @@ -59,17 +58,12 @@ public void processRecord(XlsReadContext xlsReadContext, Record record) {
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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(mcdr.getColumn());
if (targetColumnIndex == null) {
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
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;
Expand Down Expand Up @@ -54,17 +53,10 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(frec.getColumn());
if (targetColumnIndex == null) {
return;
}

Map<Integer, Cell> cellMap = xlsReadContext.xlsReadSheetHolder().getCellMap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

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;
Expand All @@ -42,17 +41,10 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(lrec.getColumn());
if (targetColumnIndex == null) {
return;
}

String data = lrec.getValue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

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 @@ -46,17 +45,10 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(lsrec.getColumn());
if (targetColumnIndex == null) {
return;
}

ReadCache readCache = xlsReadContext.readWorkbookHolder().getReadCache();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
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 @@ -44,17 +43,10 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(nr.getColumn());
if (targetColumnIndex == null) {
return;
}

ReadCellData<?> cellData =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

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;
Expand All @@ -40,18 +39,12 @@ 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;
}
Integer targetColumnIndex = xlsReadContext.readSheetHolder().determineTargetColumnIndex(re.getColumn());
if (targetColumnIndex == null) {
return;
}

xlsReadContext
.xlsReadSheetHolder()
.getCellMap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
package org.apache.fesod.sheet.analysis.v07.handlers;

import java.math.BigDecimal;
import java.util.List;
import org.apache.fesod.common.util.PositionUtils;
import org.apache.fesod.common.util.StringUtils;
import org.apache.fesod.sheet.constant.ExcelXmlConstants;
Expand Down Expand Up @@ -86,20 +85,11 @@ public void startElement(XlsxReadContext xlsxReadContext, String name, Attribute
public void endElement(XlsxReadContext xlsxReadContext, String name) {
XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder();
ReadCellData<?> tempCellData = xlsxReadSheetHolder.getTempCellData();
int targetColumnIndex = 0;

List<Integer> includeColumnIndexes =
xlsxReadContext.readSheetHolder().getReadSheet().getColumnIndexes();

if (includeColumnIndexes == null) {
targetColumnIndex = xlsxReadSheetHolder.getColumnIndex();
} else {
// if it's a target column, rewrite the cell's internal index
targetColumnIndex = includeColumnIndexes.indexOf(xlsxReadSheetHolder.getColumnIndex());
if (targetColumnIndex < 0) {

return;
}
Integer targetColumnIndex =
xlsxReadContext.readSheetHolder().determineTargetColumnIndex(xlsxReadSheetHolder.getColumnIndex());
if (targetColumnIndex == null) {
return;
}

StringBuilder tempData = xlsxReadSheetHolder.getTempData();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public CsvReaderBuilder nullString(String nullString) {
* @return
*/
public CsvReaderBuilder includeColumnIndexes(List<Integer> columnIndexes) {
readSheet.setColumnIndexes(columnIndexes);
readSheet.setIncludeColumnIndexes(columnIndexes);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,13 @@ public ReadSheet build() {
* @return
*/
public ExcelReaderSheetBuilder includeColumnIndexes(List<Integer> columnIndexes) {
readSheet.setColumnIndexes(columnIndexes);
readSheet.setIncludeColumnIndexes(columnIndexes);
return this;
}

public ExcelReaderSheetBuilder includeColumnIndexesIfNotNull(List<Integer> columnIndexes) {
if (Objects.nonNull(columnIndexes)) {
readSheet.setColumnIndexes(columnIndexes);
readSheet.setIncludeColumnIndexes(columnIndexes);
}
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

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

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.Validate;
import org.apache.fesod.common.util.MapUtils;

/**
* Strategy interface for column index resolution and filtering during sheet parsing.
*/
@FunctionalInterface
public interface ColumnIndexResolver {

/**
* Default pass-through resolver that performs no column filtering.
*/
ColumnIndexResolver PASS_THROUGH = columnIndex -> columnIndex;

/**
* Resolves the raw column index to a target column index.
*
* @param columnIndex raw 0-based column index
* @return mapped target column index, or {@code null} if the column is not included
*/
Integer resolve(int columnIndex);

static ColumnIndexResolver fromInclude(List<Integer> columnIndexes) {
return new DefaultIncludedColumnIndexResolver(columnIndexes);
}

class DefaultIncludedColumnIndexResolver implements ColumnIndexResolver {

private final Map<Integer, Integer> indexMap;

DefaultIncludedColumnIndexResolver(List<Integer> columnIndexes) {
Validate.notEmpty(columnIndexes, "The includeColumnIndexes must not be empty");
Comment thread
bengbengbalabalabeng marked this conversation as resolved.
Validate.noNullElements(columnIndexes, "The includeColumnIndexes must not contain null elements");

List<Integer> tmpColumnIndexes = new ArrayList<>(columnIndexes);
this.indexMap = MapUtils.newHashMapWithExpectedSize(tmpColumnIndexes.size());

for (int targetIndex = 0; targetIndex < tmpColumnIndexes.size(); targetIndex++) {
this.indexMap.put(tmpColumnIndexes.get(targetIndex), targetIndex);
Comment thread
bengbengbalabalabeng marked this conversation as resolved.
}
}

@Override
public Integer resolve(int columnIndex) {
Comment thread
bengbengbalabalabeng marked this conversation as resolved.
return indexMap.get(columnIndex);
}
}
}
Loading
Loading