From b6b0cb226fcf184525ee7b36af3a09471e9c0057 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 25 三月 2024 11:29:33 +0800 Subject: [PATCH] 修改数据统计的查询条件 --- src/main/java/com/lf/server/helper/WordHelper.java | 430 +++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 318 insertions(+), 112 deletions(-) diff --git a/src/main/java/com/lf/server/helper/WordHelper.java b/src/main/java/com/lf/server/helper/WordHelper.java index 311a543..b7af5ce 100644 --- a/src/main/java/com/lf/server/helper/WordHelper.java +++ b/src/main/java/com/lf/server/helper/WordHelper.java @@ -8,18 +8,23 @@ import java.io.*; import java.util.List; import java.util.Map; +import java.util.Set; /** * Word甯姪绫� + * * @author WWW + * @date 2024-03-21 */ +@SuppressWarnings("ALL") public class WordHelper { private final static Log log = LogFactory.getLog(WordHelper.class); /** * 閫氳繃word妯℃澘鐢熸垚word鐨勪富鏂规硶 + * https://blog.csdn.net/qq_46112324/article/details/128156675 */ - public static void generateWord(String inputFile, String outPutFile, Map<String, String> insertTextMap, List<String[]> addList) { + public static void generateWord(String inputFile, String outPutFile, Map<String, String> textMap, List<String[]> tableList) { FileInputStream inputStream = null; FileOutputStream outputStream = null; @@ -28,18 +33,23 @@ outputStream = new FileOutputStream(outPutFile); // 鑾峰彇docx瑙f瀽瀵硅薄 - XWPFDocument xwpfDocument = new XWPFDocument(inputStream); + XWPFDocument document = new XWPFDocument(inputStream); // 澶勭悊鎵�鏈夋枃娈垫暟鎹紝闄や簡琛ㄦ牸 - if (null != insertTextMap && insertTextMap.size() > 0) { - handleParagraphs(xwpfDocument, insertTextMap); + if (null != textMap && textMap.size() > 0) { + handleParagraphs(document, textMap); + //changeText(document, textMap); } - // 澶勭悊琛ㄦ牸鏁版嵁 - handleTable(xwpfDocument, insertTextMap, addList); + // 瑙f瀽鏇挎崲琛ㄦ牸瀵硅薄 + if (null != tableList && tableList.size() > 0) { + handleTable(document, textMap, tableList); + //changeTable(document, textMap, tableList); + } // 鍐欏叆鏁版嵁 - xwpfDocument.write(outputStream); + document.write(outputStream); + document.close(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } finally { @@ -55,6 +65,170 @@ } } } + + /** + * 鏇挎崲琛ㄦ牸瀵硅薄鏂规硶 + * + * @param document docx瑙f瀽瀵硅薄 + * @param textMap 闇�瑕佹浛鎹㈢殑淇℃伅闆嗗悎 + * @param tableList 闇�瑕佹彃鍏ョ殑琛ㄦ牸淇℃伅闆嗗悎 + */ + public static void changeTable(XWPFDocument document, Map<String, String> textMap, List<String[]> tableList) { + // 鑾峰彇琛ㄦ牸瀵硅薄闆嗗悎 + List<XWPFTable> tables = document.getTables(); + for (int i = 0; i < tables.size(); i++) { + XWPFTable table = tables.get(i); + if (table.getRows().size() > 1) { + // 鍒ゆ柇琛ㄦ牸鏄渶瑕佹浛鎹㈣繕鏄渶瑕佹彃鍏ワ紝鍒ゆ柇閫昏緫鏈�$涓烘浛鎹紝琛ㄦ牸鏃�$涓烘彃鍏� + if (!checkText(table.getText())) { + insertTable(table, tableList); + } + } + } + } + + /** + * 鏇挎崲娈佃惤鏂囨湰 + * + * @param document docx瑙f瀽瀵硅薄 + * @param textMap 闇�瑕佹浛鎹㈢殑淇℃伅闆嗗悎 + */ + public static void changeText(XWPFDocument document, Map<String, String> textMap) { + // 鑾峰彇娈佃惤闆嗗悎 + List<XWPFTable> tables = document.getTables(); + for (XWPFTable table : tables) { + if (checkText(table.getText())) { + List<XWPFTableRow> rows = table.getRows(); + for (XWPFTableRow row : rows) { + List<XWPFTableCell> tableCells = row.getTableCells(); + for (XWPFTableCell cell : tableCells) { + if (checkText(cell.getText())) { + List<XWPFParagraph> paragraphs = cell.getParagraphs(); + for (XWPFParagraph paragraph : paragraphs) { + // 鍒ゆ柇姝ゆ钀芥椂鍊欓渶瑕佽繘琛屾浛鎹� + String text = paragraph.getText(); + if (checkText(text)) { + List<XWPFRun> runs = paragraph.getRuns(); + for (XWPFRun run : runs) { + // 鏇挎崲妯℃澘鍘熸潵浣嶇疆 + if (checkText(run.toString())) { + run.setText(changeValue(paragraph.getText(), textMap), 0); + } else { + run.setText("", 0); + } + } + } + } + } + } + } + } + } + } + + /** + * 鍒ゆ柇鏂囨湰涓椂鍊欏寘鍚�$ + * + * @param text 鏂囨湰 + * @return 鍖呭惈杩斿洖true, 涓嶅寘鍚繑鍥瀎alse + */ + public static boolean checkText(String text) { + boolean check = false; + if (text.contains("$")) { + check = true; + } + return check; + } + + /** + * 鍖归厤浼犲叆淇℃伅闆嗗悎涓庢ā鏉� + * + * @param value 妯℃澘闇�瑕佹浛鎹㈢殑鍖哄煙 + * @param textMap 浼犲叆淇℃伅闆嗗悎 + * @return 妯℃澘闇�瑕佹浛鎹㈠尯鍩熶俊鎭泦鍚堝搴斿�� + */ + public static String changeValue(String value, Map<String, String> textMap) { + Set<Map.Entry<String, String>> textSets = textMap.entrySet(); + for (Map.Entry<String, String> textSet : textSets) { + // 鍖归厤妯℃澘涓庢浛鎹㈠�� 鏍煎紡${key} + String key = "${" + textSet.getKey() + "}"; + if (key.contains(value)) { + value = textSet.getValue(); + } + } + return value; + } + + /** + * 涓鸿〃鏍兼彃鍏ユ暟鎹紝琛屾暟涓嶅娣诲姞鏂拌 + * + * @param table 闇�瑕佹彃鍏ユ暟鎹殑琛ㄦ牸 + * @param tableList 鎻掑叆鏁版嵁闆嗗悎 + */ + public static void insertTable(XWPFTable table, List<String[]> tableList) { + // 璁板綍闇�瑕佹彃鍏ョ殑绗竴琛� + int start = -1; + for (int i = 0; i < table.getRows().size(); i++) { + for (int j = 0; j < table.getRows().get(i).getTableCells().size(); j++) { + if ("".equals(table.getRows().get(i).getTableCells().get(j).getText())) { + start = i; + break; + } + } + } + // 鍒涘缓琛�,鏍规嵁闇�瑕佹彃鍏ョ殑鏁版嵁娣诲姞鏂拌 + if (start != -1) { + for (int i = 1; i < tableList.size(); i++) { + insertRow(table, start, start + i); + } + } + + // 閬嶅巻琛ㄦ牸鎻掑叆鏁版嵁 + List<XWPFTableRow> rows = table.getRows(); + for (int i = start; i < rows.size(); i++) { + List<XWPFTableCell> cells = rows.get(i).getTableCells(); + for (int j = 0; j < table.getRow(start).getTableCells().size(); j++) { + XWPFTableCell cell = cells.get(j); + cell.setText(tableList.get(0)[j]); + } + tableList.remove(0); + } + } + + /** + * 涓鸿〃鏍兼彃鍏ユ暟鎹紝琛屾暟涓嶅娣诲姞鏂拌 + * + * @param table 闇�瑕佹彃鍏ユ暟鎹殑琛ㄦ牸 + * @param copyRowIndex 澶嶅埗琛屽彿 + * @param newRowIndex 鏂拌鍙� + */ + public static void insertRow(XWPFTable table, int copyRowIndex, int newRowIndex) { + // 鍦ㄨ〃鏍间腑鎸囧畾鐨勪綅缃柊澧炰竴琛� + XWPFTableRow targetRow = table.insertNewTableRow(newRowIndex); + + // 鑾峰彇闇�瑕佸鍒惰瀵硅薄 + XWPFTableRow copyRow = table.getRow(copyRowIndex); + + // 澶嶅埗琛屽璞� + targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr()); + //鎴栬闇�瑕佸鍒剁殑琛岀殑鍒� + List<XWPFTableCell> copyCells = copyRow.getTableCells(); + // 澶嶅埗鍒楀璞� + XWPFTableCell targetCell = null; + for (XWPFTableCell copyCell : copyCells) { + targetCell = targetRow.addNewTableCell(); + targetCell.getCTTc().setTcPr(copyCell.getCTTc().getTcPr()); + if (copyCell.getParagraphs() != null && copyCell.getParagraphs().size() > 0) { + targetCell.getParagraphs().get(0).getCTP().setPPr(copyCell.getParagraphs().get(0).getCTP().getPPr()); + if (copyCell.getParagraphs().get(0).getRuns() != null + && copyCell.getParagraphs().get(0).getRuns().size() > 0) { + XWPFRun cellR = targetCell.getParagraphs().get(0).createRun(); + cellR.setBold(copyCell.getParagraphs().get(0).getRuns().get(0).isBold()); + } + } + } + } + /** * 澶勭悊鎵�鏈夋枃娈垫暟鎹紝闄や簡琛ㄦ牸 @@ -119,7 +293,7 @@ */ private static void insertData(XWPFTable table, List<String[]> addList) { for (int i = 1, c = addList.size(); i < c; i++) { - XWPFTableRow row = table.createRow(); + table.createRow(); } List<XWPFTableCell> oldCells = table.getRow(1).getTableCells(); @@ -133,10 +307,24 @@ XWPFTableCell newCell = tableCells.get(j); if (0 == i) { - newCell.setText(addList.get(i)[j]); + // newCell.setText(addList.get(i)[j]) + setCellText(newCell, addList.get(i)[j]); } else { setCellText(oldCell, newCell, addList.get(i)[j]); } + } + } + } + + /** + * 璁剧疆鍗曞厓鏍兼枃鏈� + */ + private static void setCellText(XWPFTableCell cell, String text) { + List<XWPFParagraph> paragraphs = cell.getParagraphs(); + for (XWPFParagraph paragraph : paragraphs) { + List<XWPFRun> runs = paragraph.getRuns(); + for (XWPFRun run : runs) { + run.setText(text, 0); } } } @@ -151,8 +339,11 @@ public static String matchesValue(String wordValue, Map<String, String> map) { for (String s : map.keySet()) { String s1 = "${" + s + "}"; - if (s1.equals(wordValue)) { + /*if (s1.equals(wordValue)) { wordValue = map.get(s); + }*/ + if (wordValue.contains(s1)) { + wordValue = wordValue.replace(s1, map.get(s)); } } @@ -163,7 +354,7 @@ * 娴嬭瘯鏄惁鍖呭惈闇�瑕佹浛鎹㈢殑鏁版嵁 */ public static boolean isReplacement(String text) { - return text.contains("$"); + return text.contains("${"); } /** @@ -194,42 +385,7 @@ cellR.setText(text); // 澶嶅埗瀛椾綋淇℃伅 - if (tmpR != null) { - if (!cellR.isBold()) { - cellR.setBold(tmpR.isBold()); - } - cellR.setItalic(tmpR.isItalic()); - cellR.setUnderline(tmpR.getUnderline()); - cellR.setColor(tmpR.getColor()); - cellR.setTextPosition(tmpR.getTextPosition()); - if (tmpR.getFontSize() != -1) { - cellR.setFontSize(tmpR.getFontSize()); - } - if (tmpR.getFontFamily() != null) { - cellR.setFontFamily(tmpR.getFontFamily()); - } - if (tmpR.getCTR() != null) { - if (tmpR.getCTR().isSetRPr()) { - CTRPr tmpRpr = tmpR.getCTR().getRPr(); - if (tmpRpr.isSetRFonts()) { - CTFonts tmpFonts = tmpRpr.getRFonts(); - CTRPr cellRpr = cellR.getCTR().isSetRPr() ? cellR - .getCTR().getRPr() : cellR.getCTR().addNewRPr(); - CTFonts cellFonts = cellRpr.isSetRFonts() ? cellRpr - .getRFonts() : cellRpr.addNewRFonts(); - cellFonts.setAscii(tmpFonts.getAscii()); - cellFonts.setAsciiTheme(tmpFonts.getAsciiTheme()); - cellFonts.setCs(tmpFonts.getCs()); - cellFonts.setCstheme(tmpFonts.getCstheme()); - cellFonts.setEastAsia(tmpFonts.getEastAsia()); - cellFonts.setEastAsiaTheme(tmpFonts.getEastAsiaTheme()); - cellFonts.setHAnsi(tmpFonts.getHAnsi()); - cellFonts.setHAnsiTheme(tmpFonts.getHAnsiTheme()); - } - } - } - - } + copyFontInfo(cellR, tmpR); // 澶嶅埗娈佃惤淇℃伅 cellP.setAlignment(tmpP.getAlignment()); @@ -240,75 +396,125 @@ cellP.setBorderRight(tmpP.getBorderRight()); cellP.setBorderTop(tmpP.getBorderTop()); cellP.setPageBreak(tmpP.isPageBreak()); - if (tmpP.getCTP() != null) { - if (tmpP.getCTP().getPPr() != null) { - CTPPr tmpPpr = tmpP.getCTP().getPPr(); - CTPPr cellPpr = cellP.getCTP().getPPr() != null ? cellP.getCTP().getPPr() : cellP.getCTP().addNewPPr(); - // 澶嶅埗娈佃惤闂磋窛淇℃伅 - CTSpacing tmpSpacing = tmpPpr.getSpacing(); - if (tmpSpacing != null) { - CTSpacing cellSpacing = cellPpr.getSpacing() != null ? cellPpr - .getSpacing() : cellPpr.addNewSpacing(); - if (tmpSpacing.getAfter() != null) { - cellSpacing.setAfter(tmpSpacing.getAfter()); - } - if (tmpSpacing.getAfterAutospacing() != null) { - cellSpacing.setAfterAutospacing(tmpSpacing - .getAfterAutospacing()); - } - if (tmpSpacing.getAfterLines() != null) { - cellSpacing.setAfterLines(tmpSpacing.getAfterLines()); - } - if (tmpSpacing.getBefore() != null) { - cellSpacing.setBefore(tmpSpacing.getBefore()); - } - if (tmpSpacing.getBeforeAutospacing() != null) { - cellSpacing.setBeforeAutospacing(tmpSpacing - .getBeforeAutospacing()); - } - if (tmpSpacing.getBeforeLines() != null) { - cellSpacing.setBeforeLines(tmpSpacing.getBeforeLines()); - } - if (tmpSpacing.getLine() != null) { - cellSpacing.setLine(tmpSpacing.getLine()); - } - if (tmpSpacing.getLineRule() != null) { - cellSpacing.setLineRule(tmpSpacing.getLineRule()); - } - } + if (tmpP.getCTP() != null && tmpP.getCTP().getPPr() != null) { + CTPPr tmpPpr = tmpP.getCTP().getPPr(); + CTPPr cellPpr = cellP.getCTP().getPPr() != null ? cellP.getCTP().getPPr() : cellP.getCTP().addNewPPr(); - // 澶嶅埗娈佃惤缂╄繘淇℃伅 - CTInd tmpInd = tmpPpr.getInd(); - if (tmpInd != null) { - CTInd cellInd = cellPpr.getInd() != null ? cellPpr.getInd() - : cellPpr.addNewInd(); - if (tmpInd.getFirstLine() != null) { - cellInd.setFirstLine(tmpInd.getFirstLine()); - } - if (tmpInd.getFirstLineChars() != null) { - cellInd.setFirstLineChars(tmpInd.getFirstLineChars()); - } - if (tmpInd.getHanging() != null) { - cellInd.setHanging(tmpInd.getHanging()); - } - if (tmpInd.getHangingChars() != null) { - cellInd.setHangingChars(tmpInd.getHangingChars()); - } - if (tmpInd.getLeft() != null) { - cellInd.setLeft(tmpInd.getLeft()); - } - if (tmpInd.getLeftChars() != null) { - cellInd.setLeftChars(tmpInd.getLeftChars()); - } - if (tmpInd.getRight() != null) { - cellInd.setRight(tmpInd.getRight()); - } - if (tmpInd.getRightChars() != null) { - cellInd.setRightChars(tmpInd.getRightChars()); - } + // 澶嶅埗娈佃惤闂磋窛淇℃伅 + copySpacing(tmpPpr, cellPpr); + + // 澶嶅埗娈佃惤缂╄繘淇℃伅 + copyParagraph(tmpPpr, cellPpr); + } + } + + /** + * 澶嶅埗瀛椾綋淇℃伅 + */ + private static void copyFontInfo(XWPFRun cellR, XWPFRun tmpR) { + if (tmpR == null) { + return; + } + if (!cellR.isBold()) { + cellR.setBold(tmpR.isBold()); + } + cellR.setItalic(tmpR.isItalic()); + cellR.setUnderline(tmpR.getUnderline()); + cellR.setColor(tmpR.getColor()); + cellR.setTextPosition(tmpR.getTextPosition()); + if (tmpR.getFontSize() != -1) { + cellR.setFontSize(tmpR.getFontSize()); + } + if (tmpR.getFontFamily() != null) { + cellR.setFontFamily(tmpR.getFontFamily()); + } + if (tmpR.getCTR() != null) { + if (tmpR.getCTR().isSetRPr()) { + CTRPr tmpRpr = tmpR.getCTR().getRPr(); + if (tmpRpr.isSetRFonts()) { + CTFonts tmpFonts = tmpRpr.getRFonts(); + CTRPr cellRpr = cellR.getCTR().isSetRPr() ? cellR.getCTR().getRPr() : cellR.getCTR().addNewRPr(); + CTFonts cellFonts = cellRpr.isSetRFonts() ? cellRpr.getRFonts() : cellRpr.addNewRFonts(); + cellFonts.setAscii(tmpFonts.getAscii()); + cellFonts.setAsciiTheme(tmpFonts.getAsciiTheme()); + cellFonts.setCs(tmpFonts.getCs()); + cellFonts.setCstheme(tmpFonts.getCstheme()); + cellFonts.setEastAsia(tmpFonts.getEastAsia()); + cellFonts.setEastAsiaTheme(tmpFonts.getEastAsiaTheme()); + cellFonts.setHAnsi(tmpFonts.getHAnsi()); + cellFonts.setHAnsiTheme(tmpFonts.getHAnsiTheme()); } } } } + + /** + * 澶嶅埗娈佃惤闂磋窛淇℃伅 + */ + private static void copySpacing(CTPPr tmpPpr, CTPPr cellPpr) { + CTSpacing tmpSpacing = tmpPpr.getSpacing(); + if (tmpSpacing != null) { + CTSpacing cellSpacing = cellPpr.getSpacing() != null ? cellPpr.getSpacing() : cellPpr.addNewSpacing(); + if (tmpSpacing.getAfter() != null) { + cellSpacing.setAfter(tmpSpacing.getAfter()); + } + if (tmpSpacing.getAfterAutospacing() != null) { + cellSpacing.setAfterAutospacing(tmpSpacing.getAfterAutospacing()); + } + if (tmpSpacing.getAfterLines() != null) { + cellSpacing.setAfterLines(tmpSpacing.getAfterLines()); + } + if (tmpSpacing.getBefore() != null) { + cellSpacing.setBefore(tmpSpacing.getBefore()); + } + if (tmpSpacing.getBeforeAutospacing() != null) { + cellSpacing.setBeforeAutospacing(tmpSpacing + .getBeforeAutospacing()); + } + if (tmpSpacing.getBeforeLines() != null) { + cellSpacing.setBeforeLines(tmpSpacing.getBeforeLines()); + } + if (tmpSpacing.getLine() != null) { + cellSpacing.setLine(tmpSpacing.getLine()); + } + if (tmpSpacing.getLineRule() != null) { + cellSpacing.setLineRule(tmpSpacing.getLineRule()); + } + } + } + + /** + * 澶嶅埗娈佃惤缂╄繘淇℃伅 + */ + private static void copyParagraph(CTPPr tmpPpr, CTPPr cellPpr) { + CTInd tmpInd = tmpPpr.getInd(); + if (tmpInd != null) { + CTInd cellInd = cellPpr.getInd() != null ? cellPpr.getInd() : cellPpr.addNewInd(); + if (tmpInd.getFirstLine() != null) { + cellInd.setFirstLine(tmpInd.getFirstLine()); + } + if (tmpInd.getFirstLineChars() != null) { + cellInd.setFirstLineChars(tmpInd.getFirstLineChars()); + } + if (tmpInd.getHanging() != null) { + cellInd.setHanging(tmpInd.getHanging()); + } + if (tmpInd.getHangingChars() != null) { + cellInd.setHangingChars(tmpInd.getHangingChars()); + } + if (tmpInd.getLeft() != null) { + cellInd.setLeft(tmpInd.getLeft()); + } + if (tmpInd.getLeftChars() != null) { + cellInd.setLeftChars(tmpInd.getLeftChars()); + } + if (tmpInd.getRight() != null) { + cellInd.setRight(tmpInd.getRight()); + } + if (tmpInd.getRightChars() != null) { + cellInd.setRightChars(tmpInd.getRightChars()); + } + } + } } -- Gitblit v1.9.3