提交 1e67e666 authored 作者: taojinlong's avatar taojinlong

fix: 解析excel失败

上级 af79e725
package io.dataease.commons.utils; package io.dataease.commons.utils;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.dataease.datasource.dto.TableFiled; import io.dataease.datasource.dto.TableFiled;
import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
...@@ -49,16 +51,19 @@ public class ExcelReaderUtil { ...@@ -49,16 +51,19 @@ public class ExcelReaderUtil {
System.out.println(new Gson().toJson(field)); 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(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文件 } else if (fileName.endsWith(EXCEL07_EXTENSION)) {//处理excel2007文件
ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader(); ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
excelXlsxReader.process(inputStream); excelXlsxReader.process(inputStream);
System.out.println(excelXlsxReader.totalSheets.size()); System.out.println(excelXlsxReader.totalSheets.size());
System.out.println(excelXlsxReader.totalSheets.get(0).getExcelLable()); System.out.println(excelXlsxReader.totalSheets.get(1).getExcelLable());
for (TableFiled field : excelXlsxReader.totalSheets.get(0).getFields()) { for (TableFiled field : excelXlsxReader.totalSheets.get(1).getFields()) {
System.out.println(new Gson().toJson(field)); 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(0));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(1));
System.out.println(excelXlsxReader.totalSheets.get(0).getData().get(2));
} else { } else {
throw new Exception("文件格式错误,fileName的扩展名只能是xls或xlsx。"); throw new Exception("文件格式错误,fileName的扩展名只能是xls或xlsx。");
...@@ -66,7 +71,7 @@ public class ExcelReaderUtil { ...@@ -66,7 +71,7 @@ public class ExcelReaderUtil {
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
// String file ="下单渠道.xlsx"; String file ="赤收管理 2.xlsx";
// ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file)); ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
} }
} }
...@@ -148,6 +148,7 @@ public class ExcelXlsxReader extends DefaultHandler { ...@@ -148,6 +148,7 @@ public class ExcelXlsxReader extends DefaultHandler {
parser.setContentHandler(this); parser.setContentHandler(this);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData(); XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
while (sheets.hasNext()) { //遍历sheet while (sheets.hasNext()) { //遍历sheet
curRow = 1; //标记初始行为第一行 curRow = 1; //标记初始行为第一行
fields.clear(); fields.clear();
data.clear(); data.clear();
...@@ -248,17 +249,12 @@ public class ExcelXlsxReader extends DefaultHandler { ...@@ -248,17 +249,12 @@ public class ExcelXlsxReader extends DefaultHandler {
} else if ("v".equals(name)) { } else if ("v".equals(name)) {
//v => 单元格的值,如果单元格是字符串,则v标签的值为该字符串在SST中的索引 //v => 单元格的值,如果单元格是字符串,则v标签的值为该字符串在SST中的索引
String value = this.getDataValue(lastIndex.trim(), "");//根据索引值获取对应的单元格值 String value = this.getDataValue(lastIndex.trim(), "");//根据索引值获取对应的单元格值
if (preRef == null) { if (preRef == null) {
String regEx="[^0-9]"; preRef = "A" + curRow;
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(ref);
if(curCol < Integer.valueOf(m.replaceAll("").trim()) -1 ){
cellList.add(curCol, ""); cellList.add(curCol, "");
curCol++; curCol++;
} }
preRef = ref;
}
//补全单元格之间的空单元格 //补全单元格之间的空单元格
if (!"A".equals(preRef.substring(0, 1)) && curRow==1 && preRef.equalsIgnoreCase(ref)) { if (!"A".equals(preRef.substring(0, 1)) && curRow==1 && preRef.equalsIgnoreCase(ref)) {
throw new RuntimeException(Translator.get("i18n_excel_empty_column")); throw new RuntimeException(Translator.get("i18n_excel_empty_column"));
...@@ -288,14 +284,6 @@ public class ExcelXlsxReader extends DefaultHandler { ...@@ -288,14 +284,6 @@ public class ExcelXlsxReader extends DefaultHandler {
if (curRow == 1) { if (curRow == 1) {
maxRef = ref; maxRef = ref;
} }
//补全一行尾部可能缺失的单元格
if (maxRef != null) {
int len = countNullCell(maxRef, ref);
for (int i = 0; i <= len; i++) {
cellList.add(curCol, "");
curCol++;
}
}
if(curRow>1){ if(curRow>1){
List<String> tmp = new ArrayList<>(cellList); List<String> tmp = new ArrayList<>(cellList);
this.getData().add(tmp); this.getData().add(tmp);
......
...@@ -324,7 +324,7 @@ export default { ...@@ -324,7 +324,7 @@ export default {
editType: this.param.editType ? this.param.editType : 0 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'), { this.$confirm(this.$t('dataset.merge_msg'), this.$t('dataset.merge_title'), {
confirmButtonText: this.$t('dataset.merge'), confirmButtonText: this.$t('dataset.merge'),
cancelButtonText: this.$t('dataset.no_merge'), cancelButtonText: this.$t('dataset.no_merge'),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论