From fd7bc95a3c91fb7d90a921b0ff762fa6095fabd1 Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期四, 06 三月 2025 17:21:00 +0800 Subject: [PATCH] Merge branch 'dev' into dev_zj --- inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 119 insertions(+), 0 deletions(-) diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java new file mode 100644 index 0000000..386c987 --- /dev/null +++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/XWPFDocumentUtils.java @@ -0,0 +1,119 @@ +package com.ruoyi.inspect.util; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import org.apache.poi.xwpf.usermodel.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; + +import java.util.*; + +/** + * @Author zhuo + * @Date 2024/11/16 + */ +public class XWPFDocumentUtils { + + public static void updateMergeByDocument(XWPFDocument document) { + // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂 + List<XWPFTable> xwpfTables = document.getTables(); + for (int i = 0; i < xwpfTables.size(); i++) { + Set<String> set1 = new HashSet<>(); + Map<String, Map<String, Integer>> maps = new HashMap<>(); + for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) { + for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) { + if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().contains("鈭�")) { + String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�"); + if (set1.add(split[1])) { + Map<String, Integer> map = new HashMap<>(); + map.put("sr", j); + map.put("sc", k); + map.put("er", j + 0); + map.put("ec", k + 0); + maps.put(split[1], map); + } else { + Map<String, Integer> map1 = maps.get(split[1]); + if (j == map1.get("sr")) { + map1.put("ec", map1.get("ec") + 1); + } else if (k == map1.get("sc")) { + map1.put("er", map1.get("er") + 1); + } + } + String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0]; + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER); + } + } + } + // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡 + List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet()); + entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc")); + // 鎸夌収椤哄簭娣诲姞杩涢泦鍚� + List<String> list = new ArrayList<>(); + for (Map.Entry<String, Map<String, Integer>> entry : entries) { + list.add(entry.getKey()); + } + for (int a = list.size() - 1; a >= 0; a--) { + Map<String, Integer> v = maps.get(list.get(a)); + for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) { + if (v.get("ec") > v.get("sc")) { + try { + mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec")); + } catch (Exception e) { + } + } + } + if (v.get("er") > v.get("sr")) { + try { + mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er")); + } catch (Exception e) { + } + } + } + } + //澶勭悊涓嫳鏂囨崲琛岀殑闂 + List<XWPFTable> xwpfTables1 = document.getTables(); + for (int i = 0; i < xwpfTables1.size(); i++) { + for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) { + for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) { + if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) { + String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText(); + String[] split = text.split("@"); + xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); + XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph(); + XWPFRun run = xwpfParagraph.createRun(); + run.setText(split[0]); + if (ObjectUtils.isNotNull(split[1])) { + run.addBreak(); + run.setText(split[1]); + } + xwpfParagraph.setAlignment(ParagraphAlignment.CENTER); + } + } + } + } + } + + // 姘村钩鍚堝苟鍗曞厓鏍� + private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) { + for (int i = fromCol; i <= toCol; i++) { + if (i == fromCol) { + table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); + } else { + table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); + } + } + } + + // 鍨傜洿鍚堝苟鍗曞厓鏍� + private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { + for (int i = fromRow; i <= toRow; i++) { + if (i == fromRow) { + table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); + } else { + table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); + } + } + } +} + -- Gitblit v1.9.3