From a0f9bc50a276d9904594db6ae9a8e4ceed218c7d Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 26 May 2023 11:46:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=B2=BE=E7=AE=80=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5csv=E5=A4=84=E7=90=86=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 14 ++++++++++++- .../service/dataset/ExtractDataService.java | 21 +++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 3381f2d15d..a9249d57fd 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -2452,7 +2452,19 @@ public class DataSetTableService { if (num > 1000) { break; } - data.add(Arrays.asList(line.split(","))); + String str; + line += ","; + Pattern pCells = Pattern.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,"); + Matcher mCells = pCells.matcher(line); + List cells = new ArrayList();//每行记录一个list + //读取每个单元格 + while (mCells.find()) { + str = mCells.group(); + str = str.replaceAll("(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1"); + str = str.replaceAll("(?sm)(\"(\"))", "$2"); + cells.add(str); + } + data.add(cells); num++; } ExcelSheetData excelSheetData = new ExcelSheetData(); diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 71ff655b11..a10a0cd1ac 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -72,6 +72,8 @@ import javax.annotation.Resource; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Service @@ -758,13 +760,20 @@ public class ExtractDataService { List> csvData = new ArrayList<>(); String line; while ((line = reader.readLine()) != null) { - if(line.endsWith(",")){ - List list = new ArrayList<>(Arrays.asList(line.split(","))); - list.add(""); - csvData.add(list); - }else { - csvData.add(Arrays.asList(line.split(","))); + + String str; + line += ","; + Pattern pCells = Pattern.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,"); + Matcher mCells = pCells.matcher(line); + List cells = new ArrayList();//每行记录一个list + //读取每个单元格 + while (mCells.find()) { + str = mCells.group(); + str = str.replaceAll("(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1"); + str = str.replaceAll("(?sm)(\"(\"))", "$2"); + cells.add(str); } + csvData.add(cells); } ExcelSheetData csvSheetData = new ExcelSheetData(); String[] fieldArray = fields.stream().map(TableField::getFieldName).toArray(String[]::new);