From 4cef74e41af65eaa6808685c9bf85363b8d9686b Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 11 Aug 2021 09:53:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E6=9E=90=20excel=20=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/utils/ExcelXlsxReader.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java index 4419056510..63448318e1 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java @@ -19,6 +19,8 @@ import org.xml.sax.helpers.XMLReaderFactory; import java.io.InputStream; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author y @@ -248,6 +250,13 @@ public class ExcelXlsxReader extends DefaultHandler { 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; } //补全单元格之间的空单元格 @@ -256,12 +265,16 @@ public class ExcelXlsxReader extends DefaultHandler { }else if (!ref.equals(preRef)) { int len = countNullCell(ref, preRef); for (int i = 0; i < len; i++) { - cellList.add(curCol, ""); - curCol++; + if(curCol < this.fields.size()){ + cellList.add(curCol, ""); + curCol++; + } } } - cellList.add(curCol, value); + if(curCol < this.fields.size()){ + cellList.add(curCol, value); + } curCol++; //如果里面某个单元格含有值,则标识该行不为空行 if (value != null && !"".equals(value)) { @@ -414,6 +427,9 @@ public class ExcelXlsxReader extends DefaultHandler { if(CollectionUtils.isEmpty(this.getFields())){ throw new RuntimeException(Translator.get("i18n_excel_header_empty")); } + if(curCol >= this.fields.size()){ + return thisStr; + } if(curRow==2){ this.getFields().get(curCol).setFieldType(type); }else {