forked from github/dataease
feat: 识别excel data 类型
This commit is contained in:
parent
331fda059a
commit
c699ebeed4
@ -26,6 +26,7 @@ import io.dataease.provider.QueryProvider;
|
|||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
@ -45,6 +46,7 @@ import java.math.BigDecimal;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -583,7 +585,7 @@ public class DataSetTableService {
|
|||||||
switch (field) {
|
switch (field) {
|
||||||
case "TEXT":
|
case "TEXT":
|
||||||
return 0;
|
return 0;
|
||||||
case "TIME":
|
case "DATETIME":
|
||||||
return 1;
|
return 1;
|
||||||
case "LONG":
|
case "LONG":
|
||||||
case "INT":
|
case "INT":
|
||||||
@ -701,16 +703,17 @@ public class DataSetTableService {
|
|||||||
TableFiled tableFiled = new TableFiled();
|
TableFiled tableFiled = new TableFiled();
|
||||||
tableFiled.setFieldType("TEXT");
|
tableFiled.setFieldType("TEXT");
|
||||||
tableFiled.setFieldSize(1024);
|
tableFiled.setFieldSize(1024);
|
||||||
String columnName = readCell(row.getCell(j));
|
String columnName = readCell(row.getCell(j), false, null);
|
||||||
if (StringUtils.isEmpty(columnName)) {
|
if (StringUtils.isEmpty(columnName)) {
|
||||||
columnName = "NONE_" + String.valueOf(j);
|
columnName = "NONE_" + String.valueOf(j);
|
||||||
}
|
}
|
||||||
tableFiled.setFieldName(columnName);
|
tableFiled.setFieldName(columnName);
|
||||||
tableFiled.setRemarks(columnName);
|
tableFiled.setRemarks(columnName);
|
||||||
|
|
||||||
fields.add(tableFiled);
|
fields.add(tableFiled);
|
||||||
} else {
|
} else if (i == 1){
|
||||||
r[j] = readCell(row.getCell(j));
|
r[j] = readCell(row.getCell(j), true, fields.get(j));
|
||||||
|
}else {
|
||||||
|
r[j] = readCell(row.getCell(j), false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
@ -740,15 +743,17 @@ public class DataSetTableService {
|
|||||||
TableFiled tableFiled = new TableFiled();
|
TableFiled tableFiled = new TableFiled();
|
||||||
tableFiled.setFieldType("TEXT");
|
tableFiled.setFieldType("TEXT");
|
||||||
tableFiled.setFieldSize(1024);
|
tableFiled.setFieldSize(1024);
|
||||||
String columnName = readCell(row.getCell(j));
|
String columnName = readCell(row.getCell(j),false, null);
|
||||||
if (StringUtils.isEmpty(columnName)) {
|
if (StringUtils.isEmpty(columnName)) {
|
||||||
columnName = "NONE_" + String.valueOf(j);
|
columnName = "NONE_" + String.valueOf(j);
|
||||||
}
|
}
|
||||||
tableFiled.setFieldName(columnName);
|
tableFiled.setFieldName(columnName);
|
||||||
tableFiled.setRemarks(columnName);
|
tableFiled.setRemarks(columnName);
|
||||||
fields.add(tableFiled);
|
fields.add(tableFiled);
|
||||||
} else {
|
} else if (i == 1){
|
||||||
r[j] = readCell(row.getCell(j));
|
r[j] = readCell(row.getCell(j), true, fields.get(j));
|
||||||
|
}else {
|
||||||
|
r[j] = readCell(row.getCell(j), false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
@ -792,58 +797,44 @@ public class DataSetTableService {
|
|||||||
inputStream.close();
|
inputStream.close();
|
||||||
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
inferFieldType(fields, data);
|
|
||||||
map.put("fields", fields);
|
map.put("fields", fields);
|
||||||
map.put("data", jsonArray);
|
map.put("data", jsonArray);
|
||||||
map.put("sheets", sheets);
|
map.put("sheets", sheets);
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void inferFieldType(List<TableFiled> fields, List<String[]> data){
|
private String readCell(Cell cell, boolean cellType, TableFiled tableFiled) {
|
||||||
if(CollectionUtils.isEmpty(fields) || CollectionUtils.isEmpty(data)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String[] firstLine = data.get(0);
|
|
||||||
for (int i=0; i< fields.size()&& i < firstLine.length; i++) {
|
|
||||||
TableFiled filed = fields.get(i);
|
|
||||||
try{
|
|
||||||
Integer.valueOf(firstLine[i]);
|
|
||||||
filed.setFieldType("INT");
|
|
||||||
continue;
|
|
||||||
}catch (Exception ignore ){
|
|
||||||
}
|
|
||||||
try{
|
|
||||||
Long.valueOf(firstLine[i]);
|
|
||||||
filed.setFieldType("LONG");
|
|
||||||
continue;
|
|
||||||
}catch (Exception ignore ){}
|
|
||||||
try{
|
|
||||||
Double.valueOf(firstLine[i]);
|
|
||||||
filed.setFieldType("DOUBLE");
|
|
||||||
continue;
|
|
||||||
}catch (Exception ignore ){}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String readCell(Cell cell) {
|
|
||||||
CellType cellTypeEnum = cell.getCellTypeEnum();
|
CellType cellTypeEnum = cell.getCellTypeEnum();
|
||||||
if (cellTypeEnum.equals(CellType.STRING)) {
|
if (cellTypeEnum.equals(CellType.STRING)) {
|
||||||
|
if(cellType){ tableFiled.setFieldType("TEXT"); }
|
||||||
return cell.getStringCellValue();
|
return cell.getStringCellValue();
|
||||||
} else if (cellTypeEnum.equals(CellType.NUMERIC)) {
|
} else if (cellTypeEnum.equals(CellType.NUMERIC)) {
|
||||||
double d = cell.getNumericCellValue();
|
if(HSSFDateUtil.isCellDateFormatted(cell)){
|
||||||
try {
|
if(cellType) { tableFiled.setFieldType("DATETIME"); }
|
||||||
Double value = new Double(d);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
double eps = 1e-10;
|
try {
|
||||||
if(value - Math.floor(value) < eps){
|
return sdf.format(cell.getDateCellValue());
|
||||||
return value.longValue() + "";
|
}catch (Exception e){
|
||||||
}else {
|
return "";
|
||||||
NumberFormat nf = NumberFormat.getInstance();
|
}
|
||||||
nf.setGroupingUsed(false);
|
}else {
|
||||||
return nf.format(value);
|
double d = cell.getNumericCellValue();
|
||||||
|
try {
|
||||||
|
Double value = new Double(d);
|
||||||
|
double eps = 1e-10;
|
||||||
|
if(value - Math.floor(value) < eps){
|
||||||
|
if(cellType) { tableFiled.setFieldType("LONG"); }
|
||||||
|
return value.longValue() + "";
|
||||||
|
}else {
|
||||||
|
if(cellType){ tableFiled.setFieldType("DOUBLE");}
|
||||||
|
NumberFormat nf = NumberFormat.getInstance();
|
||||||
|
nf.setGroupingUsed(false);
|
||||||
|
return nf.format(value);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
BigDecimal b = new BigDecimal(d);
|
||||||
|
return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + "";
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
BigDecimal b = new BigDecimal(d);
|
|
||||||
return b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() + "";
|
|
||||||
}
|
}
|
||||||
} else if (cellTypeEnum.equals(CellType.BOOLEAN)) {
|
} else if (cellTypeEnum.equals(CellType.BOOLEAN)) {
|
||||||
return cell.getBooleanCellValue() ? "1" : "0";
|
return cell.getBooleanCellValue() ? "1" : "0";
|
||||||
|
@ -155,6 +155,7 @@ public class ExtractDataService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column_Fields = Column_Fields.substring(0, Column_Fields.length() - 2);
|
Column_Fields = Column_Fields.substring(0, Column_Fields.length() - 2);
|
||||||
Column_Fields = "(" + Column_Fields + ")\n";
|
Column_Fields = "(" + Column_Fields + ")\n";
|
||||||
return Column_Fields;
|
return Column_Fields;
|
||||||
@ -637,7 +638,12 @@ public class ExtractDataService {
|
|||||||
for (int i = 0; i < datasetTableFields.size(); i++) {
|
for (int i = 0; i < datasetTableFields.size(); i++) {
|
||||||
ExcelInputField field = new ExcelInputField();
|
ExcelInputField field = new ExcelInputField();
|
||||||
field.setName(datasetTableFields.get(i).getOriginName());
|
field.setName(datasetTableFields.get(i).getOriginName());
|
||||||
field.setType("String");
|
if(datasetTableFields.get(i).getDeExtractType() == 1){
|
||||||
|
field.setType("Date");
|
||||||
|
field.setFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
}else {
|
||||||
|
field.setType("String");
|
||||||
|
}
|
||||||
fields[i] = field;
|
fields[i] = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user