POI修改word指定內容或關鍵字
阿新 • • 發佈:2018-12-12
/** * * @param srcPath 原檔案路徑 * @param destPath 生成檔案路徑 * @param map 要替換的資料集合 */
public static void searchAndReplace(String srcPath, String destPath, Map<String, String> map) { try { XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath)); /*** 替換段落中的指定文字*/ Iterator<XWPFParagraph> itPara = document.getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { String key = iterator.next(); List<XWPFRun> run = paragraph.getRuns(); for (int i = 0; i < run.size(); i++) { if (run.get(i) != null && String.valueOf(run.get(i)).equals(key)) { System.out.println(map.get(key)); run.get(i).setText(map.get(key), 0); } } } } /** * 替換表格中的指定文字 */ Iterator<XWPFTable> itTable = document.getTablesIterator(); while (itTable.hasNext()) { XWPFTable table = (XWPFTable) itTable.next(); int count = table.getNumberOfRows(); for (int i = 0; i < count; i++) { XWPFTableRow row = table.getRow(i); List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { for (Map.Entry<String, String> e : map.entrySet()) { if (cell.getText().equals(e.getKey())) { cell.removeParagraph(0); cell.setText(e.getValue()); } } } } } FileOutputStream outStream = null; outStream = new FileOutputStream(destPath); document.write(outStream); outStream.close(); } catch (Exception e) { e.printStackTrace(); } }