feat: 修改dataSheet支持根据column或者title来解析excel
This commit is contained in:
parent
9af69dbf95
commit
bc3bd83a57
@ -316,6 +316,12 @@ public interface DataSheetClient {
|
||||
* cell的header,一般为中文
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* excel的列顺序,从0开始,可以name或者column二选一
|
||||
*/
|
||||
private Integer column;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
|
||||
@ -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<Integer, String> headerMap = dataListener.getHeadMap();
|
||||
Map<String, DataSheetClient.CellMeta> cellMetaMap = Maps.uniqueIndex(meta.getCellMetas(),
|
||||
DataSheetClient.CellMeta::getName);
|
||||
boolean cellTypeColumn = meta.getCellMetas().stream().anyMatch(cellMeta -> cellMeta.getColumn() == null);
|
||||
Map<String, DataSheetClient.CellMeta> cellMetaMap = resolveCellMetaMap(cellTypeColumn);
|
||||
|
||||
List<Map<Integer, String>> 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<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) {
|
||||
try {
|
||||
return ColumnConvertResp.builder()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user