Unverified 提交 b03598db authored 作者: taojinlong's avatar taojinlong 提交者: GitHub

Merge pull request #267 from dataease/pr@dev@excel

Merge branch 'dev' into pr@dev@excel
package io.dataease.commons.utils;
import com.google.gson.Gson;
import io.dataease.datasource.dto.TableFiled;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ExcelReaderUtil {
//excel2003扩展名
public static final String EXCEL03_EXTENSION = ".xls";
//excel2007扩展名
public static final String EXCEL07_EXTENSION = ".xlsx";
public static void sendRows(String filePath, String sheetName, int sheetIndex, int curRow, List<String> cellList) {
StringBuffer oneLineSb = new StringBuffer();
oneLineSb.append(filePath);
oneLineSb.append("--");
oneLineSb.append("sheet" + sheetIndex);
oneLineSb.append("::" + sheetName);//加上sheet名
oneLineSb.append("--");
oneLineSb.append("row" + curRow);
oneLineSb.append("::");
// map.put(cellList.get(9),cellList.get(0)) ;
for (String cell : cellList) {
oneLineSb.append(cell.trim());
oneLineSb.append("|");
}
String oneLine = oneLineSb.toString();
if (oneLine.endsWith("|")) {
oneLine = oneLine.substring(0, oneLine.lastIndexOf("|"));
}// 去除最后一个分隔符
System.out.println(oneLine);
}
/**
* 读取excel文件路径
* @param fileName 文件路径
* @throws Exception
*/
public static void readExcel(String fileName, InputStream inputStream) throws Exception {
if (fileName.endsWith(EXCEL03_EXTENSION)) { //处理excel2003文件
ExcelXlsReader excelXls=new ExcelXlsReader();
excelXls.process(inputStream);
System.out.println(excelXls.totalSheets.size());
System.out.println(excelXls.totalSheets.get(0).getSheetName());
for (TableFiled field : excelXls.totalSheets.get(0).getFields()) {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXls.totalSheets.get(0).getData().get(0));
} else if (fileName.endsWith(EXCEL07_EXTENSION)) {//处理excel2007文件
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
excelXlsxReader.process(inputStream);
System.out.println(excelXlsxReader.totalSheets.size());
System.out.println(excelXlsxReader.totalSheets.get(0).getSheetName());
for (TableFiled field : excelXlsxReader.totalSheets.get(0).getFields()) {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(0));
} else {
throw new Exception("文件格式错误,fileName的扩展名只能是xls或xlsx。");
}
}
public static void main(String[] args) throws Exception {
ExcelReaderUtil.readExcel("111.xls", new FileInputStream("/Users/taojinlong/Desktop/111.xls"));
}
}
......@@ -185,6 +185,9 @@ public class JdbcProvider extends DatasourceProvider {
field.setFieldType(t);
field.setFieldSize(metaData.getColumnDisplaySize(j + 1));
if(t.equalsIgnoreCase("LONG")){field.setFieldSize(65533);} //oracle LONG
if(StringUtils.isNotEmpty(t) && t.toLowerCase().contains("date") && field.getFieldSize() < 50 ){
field.setFieldSize(50);
}
fieldList.add(field);
}
return fieldList;
......
package io.dataease.dto.dataset;
import io.dataease.datasource.dto.TableFiled;
import lombok.Data;
import java.util.List;
@Data
public class ExcelSheetData {
private String sheetName;
private List<List<String>> data;
private List<TableFiled> fields;
}
......@@ -1012,7 +1012,7 @@ public class DataSetTableService {
public Map<String, Object> excelSaveAndParse(MultipartFile file, String tableId) throws Exception {
String filename = file.getOriginalFilename();
// parse file
Map<String, Object> fileMap = parseExcel(filename, file.getInputStream(), true);
Map<String, Object> fileMap = parseExcel2(filename, file.getInputStream(), true);
if (StringUtils.isNotEmpty(tableId)) {
List<DatasetTableField> datasetTableFields = dataSetTableFieldsService.getFieldsByTableId(tableId);
datasetTableFields.sort((o1, o2) -> {
......@@ -1038,6 +1038,52 @@ public class DataSetTableService {
return map;
}
private Map<String, Object> parseExcel2(String filename, InputStream inputStream, boolean isPreview) throws Exception {
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
List<TableFiled> fields = new ArrayList<>();
List<List<String>> data = new ArrayList<>();
List<Map<String, Object>> jsonArray = new ArrayList<>();
List<String> sheets = new ArrayList<>();
if (StringUtils.equalsIgnoreCase(suffix, "xls")) {
ExcelXlsReader excelXlsReader = new ExcelXlsReader();
excelXlsReader.process(inputStream);
fields = excelXlsReader.totalSheets.get(0).getFields();
data = excelXlsReader.totalSheets.get(0).getData();
sheets = excelXlsReader.totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList());
}
if (StringUtils.equalsIgnoreCase(suffix, "xlsx")) {
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
excelXlsxReader.process(inputStream);
fields = excelXlsxReader.totalSheets.get(0).getFields();
data = excelXlsxReader.totalSheets.get(0).getData();
sheets = excelXlsxReader.totalSheets.stream().map(ExcelSheetData::getSheetName).collect(Collectors.toList());
}
String[] fieldArray = fields.stream().map(TableFiled::getFieldName).toArray(String[]::new);
// 校验excel字段是否重名
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
if (CollectionUtils.isNotEmpty(data)) {
jsonArray = data.stream().map(ele -> {
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < ele.size(); i++) {
map.put(fieldArray[i], ele.get(i));
}
return map;
}).collect(Collectors.toList());
}
inputStream.close();
Map<String, Object> map = new HashMap<>();
map.put("fields", fields);
map.put("data", jsonArray);
map.put("sheets", sheets);
return map;
}
private Map<String, Object> parseExcel(String filename, InputStream inputStream, boolean isPreview) throws Exception {
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
List<TableFiled> fields = new ArrayList<>();
......@@ -1191,6 +1237,7 @@ public class DataSetTableService {
return map;
}
private String readCell(Cell cell, boolean cellType, TableFiled tableFiled) {
if (cell == null) {
return "";
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论