fix: 解析excel失败

This commit is contained in:
taojinlong 2021-08-13 17:10:59 +08:00
parent af79e725a3
commit 1e67e6669c
3 changed files with 16 additions and 23 deletions

View File

@ -1,6 +1,8 @@
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.List;
@ -49,16 +51,19 @@ public class ExcelReaderUtil {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXls.totalSheets.get(0).getData().get(0));
System.out.println(excelXls.totalSheets.get(0).getData().get(1));
System.out.println(excelXls.totalSheets.get(0).getData().get(2));
} 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).getExcelLable());
for (TableFiled field : excelXlsxReader.totalSheets.get(0).getFields()) {
System.out.println(excelXlsxReader.totalSheets.get(1).getExcelLable());
for (TableFiled field : excelXlsxReader.totalSheets.get(1).getFields()) {
System.out.println(new Gson().toJson(field));
}
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(0));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(1));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(2));
} else {
throw new Exception("文件格式错误fileName的扩展名只能是xls或xlsx。");
@ -66,7 +71,7 @@ public class ExcelReaderUtil {
}
public static void main(String[] args) throws Exception {
// String file ="下单渠道.xlsx";
// ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
String file ="赤收管理 2.xlsx";
ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
}
}

View File

@ -148,6 +148,7 @@ public class ExcelXlsxReader extends DefaultHandler {
parser.setContentHandler(this);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (sheets.hasNext()) { //遍历sheet
curRow = 1; //标记初始行为第一行
fields.clear();
data.clear();
@ -248,17 +249,12 @@ public class ExcelXlsxReader extends DefaultHandler {
} else if ("v".equals(name)) {
//v => 单元格的值如果单元格是字符串则v标签的值为该字符串在SST中的索引
String value = this.getDataValue(lastIndex.trim(), "");//根据索引值获取对应的单元格值
if (preRef == null) {
String regEx="[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(ref);
if(curCol < Integer.valueOf(m.replaceAll("").trim()) -1 ){
cellList.add(curCol, "");
curCol++;
}
preRef = ref;
preRef = "A" + curRow;
cellList.add(curCol, "");
curCol++;
}
//补全单元格之间的空单元格
if (!"A".equals(preRef.substring(0, 1)) && curRow==1 && preRef.equalsIgnoreCase(ref)) {
throw new RuntimeException(Translator.get("i18n_excel_empty_column"));
@ -288,14 +284,6 @@ public class ExcelXlsxReader extends DefaultHandler {
if (curRow == 1) {
maxRef = ref;
}
//补全一行尾部可能缺失的单元格
if (maxRef != null) {
int len = countNullCell(maxRef, ref);
for (int i = 0; i <= len; i++) {
cellList.add(curCol, "");
curCol++;
}
}
if(curRow>1){
List<String> tmp = new ArrayList<>(cellList);
this.getData().add(tmp);

View File

@ -324,7 +324,7 @@ export default {
editType: this.param.editType ? this.param.editType : 0
}
}
if(new Set(sheetFileMd5).size !== sheetFileMd5.length){
if(new Set(sheetFileMd5).size !== sheetFileMd5.length && !this.param.tableId){
this.$confirm(this.$t('dataset.merge_msg'), this.$t('dataset.merge_title'), {
confirmButtonText: this.$t('dataset.merge'),
cancelButtonText: this.$t('dataset.no_merge'),