From 75a2e82efad72d8c63d355b94f808d6cbeb40fc4 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 22 Apr 2025 18:16:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4=E8=BF=9B=E5=BA=A6bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PlanRecordServiceImpl.java | 19 +------ .../java/com/zhgd/xmgl/util/ExcelUtils.java | 53 ++++++++++++------ .../resources/excel/进度检测体系模板.xlsx | Bin 52959 -> 52956 bytes 3 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java index 4431592f9..b197c9bd8 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java @@ -730,7 +730,6 @@ public class PlanRecordServiceImpl extends ServiceImpl Objects.equals(planRecord.getWorkType(), 2)).collect(Collectors.toList()); List tree = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(planRecords)), "id", "parentId", "children"), PlanRecord.class); planRecords = ListUtils.treeToList(tree, "id", "parentId", "children", "0"); -// List list = treeToList(top); PlanRecord ePlanRecord = null; PlanRecord pPlanRecord = null; PlanRecord cPlanRecord = null; @@ -801,10 +799,11 @@ public class PlanRecordServiceImpl extends ServiceImpl> root, List planRecords, PlanRecord parent, int sheetIndex) { Map threeMap = new HashMap<>(15); + List> listMap = new ArrayList<>(); + threeMap.put("listMap", listMap); if (parent != null) { threeMap.put("jobName1", "单元名称:" + parent.getJobName()); List list = planRecords.stream().filter(planRecord -> planRecord.getAncestors().contains(parent.getId() + "")).collect(Collectors.toList()); - List> listMap = new ArrayList<>(); for (PlanRecord record : list) { HashMap map = new HashMap<>(); map.put("code1", record.getJobName()); @@ -818,23 +817,11 @@ public class PlanRecordServiceImpl extends ServiceImpl treeToList(PlanRecord top) { - List children = top.getChildren(); - if (children == null) { - return null; - } - for (PlanRecord child : children) { - treeToList(child); - } - return null; - } - /** * 保存单元数据 1.E单元;2.P单元;3.C单元;4.S单元 * diff --git a/src/main/java/com/zhgd/xmgl/util/ExcelUtils.java b/src/main/java/com/zhgd/xmgl/util/ExcelUtils.java index acf701bd3..236de69dd 100644 --- a/src/main/java/com/zhgd/xmgl/util/ExcelUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/ExcelUtils.java @@ -57,22 +57,43 @@ public class ExcelUtils { public static void downLoadFormulaExcel(String fileName, HttpServletResponse response, Map> map, TemplateExportParams template) throws IOException { Workbook workbook = ExcelExportUtil.exportExcel(map, template); FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); - evaluator.evaluateAll(); -// for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { -// Sheet sheet = workbook.getSheetAt(sheetNum); -// for (Row r : sheet) { -// for (Cell c : r) { -// if (c != null) { -// String cell = c.getCellFormula(); -// if (cell.indexOf("=") == 0) { -// c.setCellFormula(cell.substring(1)); -// evaluator.evaluate(c); -// } -// } -// } -// } -// } - workbook.setForceFormulaRecalculation(true); // 强制公式自动计算 + + for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { + Sheet sheet = workbook.getSheetAt(sheetNum); + for (Row r : sheet) { + for (Cell c : r) { + if (c == null) continue; + + // 仅处理字符串类型的单元格 + if (c.getCellType() == CellType.STRING) { + String value = c.getStringCellValue(); + if (value.startsWith("=")) { + // 设置公式 + String formula = value.substring(1); + try { + c.setCellFormula(formula); + } catch (Exception e) { + // 处理公式错误,例如无效语法 + log.error("公式设置失败: " + formula); + continue; + } + + // 更改进样式为常规格式,避免Excel显示为文本 +// CellStyle style = workbook.createCellStyle(); +// style.cloneStyleFrom(c.getCellStyle()); +// style.setDataFormat((short)BuiltinFormats.getBuiltinFormat("General")); +// c.setCellStyle(style); + + // 计算公式结果并更新单元格类型 + evaluator.evaluateFormulaCell(c); + } + } + } + } + } + + // 强制Excel打开时重新计算公式 + workbook.setForceFormulaRecalculation(true); downLoadExcel(fileName, response, workbook); } diff --git a/src/main/resources/excel/进度检测体系模板.xlsx b/src/main/resources/excel/进度检测体系模板.xlsx index d8b8c81f348f89785c4deac7140f9a90bb0c5951..462264e014f26b8e68f00cc522459483829cd0a6 100644 GIT binary patch delta 3492 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 ZF!TQJ68r!1-MqiTt`QC@%l