Ver código fonte

feat:excel报告的表格提取完成

wangzaijun 6 meses atrás
pai
commit
0366d69369

+ 2 - 4
service-base/src/main/java/com/simuwang/base/pojo/dto/report/CustomExcelTable.java

@@ -1,7 +1,6 @@
 package com.simuwang.base.pojo.dto.report;
 
 import com.simuwang.base.common.conts.Constants;
-import lombok.Getter;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -9,10 +8,9 @@ import java.io.Serializable;
 /**
  * @author wangzaijun
  * @date 2024/10/14 8:52
- * @description 自定义传递的表格对象,设置表格表格、列数和开始列索引
+ * @description 自定义传递的表格对象,设置表格表格、列数(如果为0则不限制列数)、开始列索引和行数(包含表头,如果为0则不限制行数)
  */
-@Getter
-public record CustomExcelTable(String title, int colCount) implements Serializable {
+public record CustomExcelTable(String title, int colCount, int startCol, int rowCount) implements Serializable {
     @Serial
     private static final long serialVersionUID = Constants.DEFAULT_SERIAL_ID;
 }

+ 17 - 10
service-daq/src/main/java/com/simuwang/daq/components/CustomExcelMultiSheetListener.java

@@ -7,6 +7,8 @@ import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
 import com.simuwang.base.pojo.dto.report.CustomExcelTable;
 import com.simuwang.base.pojo.dto.report.SimpleTable;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.List;
 
@@ -15,18 +17,16 @@ import java.util.List;
  * @date 2024/10/12 9:17
  * @description 自定义的excel多sheet解析事件监听器
  */
-public class CustomExcelMultiSheetListener extends AnalysisEventListener<LinkedHashMap<Integer, Object>> {
+public class CustomExcelMultiSheetListener extends AnalysisEventListener<LinkedHashMap<Integer, Object>> implements Closeable {
     private final List<SimpleTable> tables = ListUtil.list(false);
     private SimpleTable table;
 
+    private CustomExcelTable customExcelTable;
+
     public List<SimpleTable> getTables() {
         return tables;
     }
 
-    public void cleanTables() {
-        this.tables.clear();
-    }
-
     @Override
     public void invoke(LinkedHashMap<Integer, Object> row, AnalysisContext analysisContext) {
         ReadSheetHolder sheetHolder = analysisContext.readSheetHolder();
@@ -39,18 +39,20 @@ public class CustomExcelMultiSheetListener extends AnalysisEventListener<LinkedH
         String title = ReportParseUtils.cleaningValue(row.get(1));
         if (title != null) {
             for (CustomExcelTable customExcelTable : customExcelTables) {
-                String tableTitle = customExcelTable.getTitle();
+                String tableTitle = customExcelTable.title();
                 if (title.equals(tableTitle) || title.contains(tableTitle)) {
-                    this.table = new SimpleTable(tableTitle, customExcelTable.getColCount());
+                    this.table = new SimpleTable(tableTitle, customExcelTable.colCount());
+                    this.customExcelTable = customExcelTable;
                     this.tables.add(this.table);
                     return;
                 }
             }
         }
-        if (this.table != null) {
+        int rowCount = this.customExcelTable.rowCount() <= 0 ? Integer.MAX_VALUE : this.customExcelTable.rowCount();
+        if (this.table != null && this.table.getRowCount() < rowCount) {
             List<String> tableRow = ListUtil.list(true);
-            int colCount = this.table.getColCount() <= 0 ? row.size() : this.table.getColCount();
-            for (int i = 1; i < colCount; i++) {
+            int colCount = this.table.getColCount() <= 0 ? row.size() : this.table.getColCount() + this.customExcelTable.startCol();
+            for (int i = this.customExcelTable.startCol(); i < colCount; i++) {
                 tableRow.add(ReportParseUtils.cleaningValue(row.get(i)));
             }
             this.table.addRow(tableRow);
@@ -61,4 +63,9 @@ public class CustomExcelMultiSheetListener extends AnalysisEventListener<LinkedH
     public void doAfterAllAnalysed(AnalysisContext analysisContext) {
 
     }
+
+    @Override
+    public void close() throws IOException {
+        this.tables.clear();
+    }
 }

+ 1 - 3
service-daq/src/main/java/com/simuwang/daq/components/report/parser/excel/AbstractExcelReportParser.java

@@ -31,9 +31,7 @@ public abstract class AbstractExcelReportParser<T extends ReportData> extends Ab
         readerBuilder.doReadAll();
         // 解析出表格
         List<SimpleTable> tables = excelListener.getTables();
-        T reportData = this.excelParse(tables, params);
-        excelListener.cleanTables();
-        return reportData;
+        return this.excelParse(tables, params);
     }
 
     @Override

+ 3 - 3
service-daq/src/main/java/com/simuwang/daq/components/report/parser/excel/ExcelMonthlyReportParser.java

@@ -20,9 +20,9 @@ public class ExcelMonthlyReportParser extends AbstractExcelReportParser<MonthlyR
     @Override
     protected List<CustomExcelTable> customExcelTables() {
         List<CustomExcelTable> customExcelTables = ListUtil.list(true);
-        customExcelTables.add(new CustomExcelTable("基金概况", 4));
-        customExcelTables.add(new CustomExcelTable("净值月报", 5));
-        customExcelTables.add(new CustomExcelTable("级基金净值表", 5));
+        customExcelTables.add(new CustomExcelTable("基金概况", 4, 1, 0));
+        customExcelTables.add(new CustomExcelTable("净值月报", 5, 1, 2));
+        customExcelTables.add(new CustomExcelTable("级基金净值表", 5, 1, 2));
         return customExcelTables;
     }
 

+ 8 - 2
service-daq/src/main/java/com/simuwang/daq/utils/ExcelReportParseUtil.java

@@ -3,19 +3,25 @@ package com.simuwang.daq.utils;
 import cn.hutool.core.collection.ListUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.read.builder.ExcelReaderBuilder;
+import com.simuwang.base.pojo.dto.report.CustomExcelTable;
 import com.simuwang.base.pojo.dto.report.SimpleTable;
 import com.simuwang.daq.components.CustomExcelMultiSheetListener;
 
 import java.util.List;
 
 public class ExcelReportParseUtil {
-    public static final String filepath = "D:\\Documents\\workspace\\idea\\smppw\\data-daq\\service-daq\\src\\main\\java\\com\\simuwang\\daq\\utils\\PB0001私募月报(证券投资).xlsx";
+    public static final String filepath = "D:\\Documents\\workspace\\idea\\smppw\\data-daq\\service-daq\\src\\main\\java\\com\\simuwang\\daq\\utils\\ST8112_瑞富兴康稳健成长一号私募证券投资基金_信息披露月报.xlsx";
 
     public static void main(String[] args) {
+        List<CustomExcelTable> customExcelTables = ListUtil.list(true);
+        customExcelTables.add(new CustomExcelTable("基金概况", 4, 1, 0));
+        customExcelTables.add(new CustomExcelTable("净值月报", 5, 1, 2));
+        customExcelTables.add(new CustomExcelTable("级基金净值表", 5, 1, 2));
+
         CustomExcelMultiSheetListener readListener = new CustomExcelMultiSheetListener();
         ExcelReaderBuilder readerBuilder = EasyExcel.read(filepath);
         readerBuilder.sheet();
-        readerBuilder.customObject(ListUtil.toList("基金概况", "净值月报", "级基金净值表"));
+        readerBuilder.customObject(customExcelTables);
         readerBuilder.registerReadListener(readListener);
         readerBuilder.doReadAll();
 

BIN
service-daq/src/main/java/com/simuwang/daq/utils/ST8112_瑞富兴康稳健成长一号私募证券投资基金_信息披露月报.xlsx