feat: 修改dataSheet支持根据column或者title来解析excel
This commit is contained in:
parent
9af69dbf95
commit
bc3bd83a57
@ -316,6 +316,12 @@ public interface DataSheetClient {
|
|||||||
* cell的header,一般为中文
|
* cell的header,一般为中文
|
||||||
*/
|
*/
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* excel的列顺序,从0开始,可以name或者column二选一
|
||||||
|
*/
|
||||||
|
private Integer column;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
@ -359,8 +360,9 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
|
|
||||||
// 根据meta来校验cell的类型
|
// 根据meta来校验cell的类型
|
||||||
Map<Integer, String> headerMap = dataListener.getHeadMap();
|
Map<Integer, String> headerMap = dataListener.getHeadMap();
|
||||||
Map<String, DataSheetClient.CellMeta> cellMetaMap = Maps.uniqueIndex(meta.getCellMetas(),
|
boolean cellTypeColumn = meta.getCellMetas().stream().anyMatch(cellMeta -> cellMeta.getColumn() == null);
|
||||||
DataSheetClient.CellMeta::getName);
|
Map<String, DataSheetClient.CellMeta> cellMetaMap = resolveCellMetaMap(cellTypeColumn);
|
||||||
|
|
||||||
List<Map<Integer, String>> lines = dataListener.getLines();
|
List<Map<Integer, String>> lines = dataListener.getLines();
|
||||||
return IntStream.range(0, lines.size())
|
return IntStream.range(0, lines.size())
|
||||||
.mapToObj(lineIndex -> {
|
.mapToObj(lineIndex -> {
|
||||||
@ -370,7 +372,7 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
.map(entry -> {
|
.map(entry -> {
|
||||||
Integer columnIndex = entry.getKey();
|
Integer columnIndex = entry.getKey();
|
||||||
String header = entry.getValue();
|
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);
|
return convertType(cellMeta, line.get(columnIndex), lineIndex, columnIndex);
|
||||||
})
|
})
|
||||||
.collect(Collectors.groupingBy(ColumnConvertResp::getSuccess));
|
.collect(Collectors.groupingBy(ColumnConvertResp::getSuccess));
|
||||||
@ -391,6 +393,18 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, DataSheetClient.CellMeta> 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) {
|
private ColumnConvertResp convertType(DataSheetClient.CellMeta cellMeta, String rawValue, int rowIndex, int columnIndex) {
|
||||||
try {
|
try {
|
||||||
return ColumnConvertResp.builder()
|
return ColumnConvertResp.builder()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user