From dda80932a7103b5c12f759e06140c980bfdf49dd Mon Sep 17 00:00:00 2001 From: lilong Date: Wed, 20 Mar 2024 10:22:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9dataSheet=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=A0=B9=E6=8D=AEcolumn=E6=88=96=E8=80=85title?= =?UTF-8?q?=E6=9D=A5=E8=A7=A3=E6=9E=90excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/pokonyan/client/DataSheetClient.java | 6 ++++++ .../client/impl/DataSheetImporter.java | 20 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/cn/axzo/pokonyan/client/DataSheetClient.java b/src/main/java/cn/axzo/pokonyan/client/DataSheetClient.java index 16a2c07..28d221c 100644 --- a/src/main/java/cn/axzo/pokonyan/client/DataSheetClient.java +++ b/src/main/java/cn/axzo/pokonyan/client/DataSheetClient.java @@ -316,6 +316,12 @@ public interface DataSheetClient { * cell的header,一般为中文 */ private String name; + + /** + * excel的列顺序,从0开始,可以name或者column二选一 + */ + private Integer column; + /** * 类型 */ diff --git a/src/main/java/cn/axzo/pokonyan/client/impl/DataSheetImporter.java b/src/main/java/cn/axzo/pokonyan/client/impl/DataSheetImporter.java index 93d0f1d..c8a9246 100644 --- a/src/main/java/cn/axzo/pokonyan/client/impl/DataSheetImporter.java +++ b/src/main/java/cn/axzo/pokonyan/client/impl/DataSheetImporter.java @@ -25,6 +25,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -359,8 +360,9 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder { // 根据meta来校验cell的类型 Map headerMap = dataListener.getHeadMap(); - Map cellMetaMap = Maps.uniqueIndex(meta.getCellMetas(), - DataSheetClient.CellMeta::getName); + boolean cellTypeColumn = meta.getCellMetas().stream().anyMatch(cellMeta -> cellMeta.getColumn() == null); + Map cellMetaMap = resolveCellMetaMap(cellTypeColumn); + List> lines = dataListener.getLines(); return IntStream.range(0, lines.size()) .mapToObj(lineIndex -> { @@ -370,7 +372,7 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder { .map(entry -> { Integer columnIndex = entry.getKey(); String header = entry.getValue(); - DataSheetClient.CellMeta cellMeta = cellMetaMap.get(header); + DataSheetClient.CellMeta cellMeta = cellTypeColumn ? cellMetaMap.get(columnIndex.toString()) : cellMetaMap.get(header); return convertType(cellMeta, line.get(columnIndex), lineIndex, columnIndex); }) .collect(Collectors.groupingBy(ColumnConvertResp::getSuccess)); @@ -391,6 +393,18 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder { .collect(Collectors.toList()); } + + private Map resolveCellMetaMap(boolean cellTypeColumn) { + if (BooleanUtils.isTrue(cellTypeColumn)) { + // 根据列顺序解析 + return Maps.uniqueIndex(meta.getCellMetas(), + cellMeta -> cellMeta.getColumn().toString()); + } + // 根据列名字解析 + return Maps.uniqueIndex(meta.getCellMetas(), + DataSheetClient.CellMeta::getName); + } + private ColumnConvertResp convertType(DataSheetClient.CellMeta cellMeta, String rawValue, int rowIndex, int columnIndex) { try { return ColumnConvertResp.builder()