Explorar o código

1.修复机器设备测算表生成第一行被公式引用了的单元格无数据的话公式报错#VALUE

GouGengquan hai 4 meses
pai
achega
bc05eab10f

+ 23 - 1
service/src/main/java/com/dayou/service/impl/AssetsCalculateServiceImpl.java

@@ -202,10 +202,11 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
         // 模板文件的位置
         String mainDetailTmplPath = fileNetConfig.getBaseDir() + mainDetail.getSectionFileUrl() + mainDetail.getSectionFileName();
         // 写入
+        List<AssetsCalculateEqptData> allEqptData = dataService.getAllByAssetsCalculateId(calculateId, null);
         EasyExcel.write(mainDetailPath)
                 .withTemplate(mainDetailTmplPath)
                 .sheet()
-                .doFill(dataService.getAllByAssetsCalculateId(calculateId, null));
+                .doFill(allEqptData);
 
         // 第二步:写入数据到 机器设备-主模板
         // 获取模板
@@ -238,6 +239,18 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
         // 第四步:主模板设置公式
         // 遍历所有行,跳过前四行
         Sheet sheet = workbook.getSheetAt(0);
+
+        // 修复第一行数据公式引用的数据为NULL时公式报错 #VALUE
+        if (ObjectUtil.isNull(allEqptData.get(0).getFreightAndMiscellaneousFeeRate())) {
+            sheet.getRow(4).getCell(36).setBlank();
+        }
+        if (ObjectUtil.isNull(allEqptData.get(0).getBaseRate())) {
+            sheet.getRow(4).getCell(38).setBlank();
+        }
+        if (ObjectUtil.isNull(allEqptData.get(0).getInstallationRate())) {
+            sheet.getRow(4).getCell(40).setBlank();
+        }
+
         for (int i = 4; i <= sheet.getLastRowNum(); i++) {
             Row row = sheet.getRow(i);
             // 循环设置公式
@@ -271,6 +284,15 @@ public class AssetsCalculateServiceImpl extends ServiceImpl<AssetsCalculateMappe
             EasyExcelUtil.mergeExcel(importedPath, workbook, workbook.getSheetIndex("进口设备"), 0, 0, 0);
             // 设置公式
             Sheet importedSheet = workbook.getSheet("进口设备");
+
+            // 修复第一行数据公式引用的数据为NULL时公式报错 #VALUE
+            if (ObjectUtil.isNull(impEqptData.get(0).getBankChargesRate())) {
+                importedSheet.getRow(2).getCell(27).setBlank();
+            }
+            if (ObjectUtil.isNull(impEqptData.get(0).getForeignTransactionRate())) {
+                importedSheet.getRow(2).getCell(29).setBlank();
+            }
+
             for (int i = 2; i <= importedSheet.getLastRowNum(); i++) { // 跳过前两行
                 Row row = importedSheet.getRow(i);
                 // 循环设置公式