2010-08-04 129 views
2

我使用Apache POI從模板生成docx文件。似乎沒有一種明顯的方式來替換段落中的所有文本,而且文檔非常稀少。現在,我可以通過循環遍歷段落來閱讀文檔,然後遍歷每個段落的運行,然後遍歷每個運行的文本......這很好,我可以替換運行中文本的內容,但是我的模板佔位符(例如:<>)可能會分成幾個運行,這使匹配和替換非常複雜。有沒有辦法設置XWPFParagraph的內容?或者至少有一種方法可以將段落中的所有運行打包並創建自己的運行?Apache POI:替換段落文本

這是我到目前爲止有:

public static void main(String[] args) { 

    InputStream fs = null; 
    try { 
     fs = new FileInputStream("C:\\sample1.docx"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    XWPFDocument doc = null; 
    try { 
     doc = new XWPFDocument(fs); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    for (int i = 0; i < doc.getParagraphs().length; i++) { 
     XWPFParagraph paragraph = doc.getParagraphs()[i]; 
     paragraph.getCTP().getRArray(). 

     // This will output the paragraph's contents. 
     System.out.println(paragraph.getParagraphText()); 

     for (int j = 0; j < paragraph.getCTP().getRArray().length; j++) { 
      CTR run = paragraph.getCTP().getRArray()[j]; 

      for (int k = 0; k < run.getTArray().length; k++) { 
       CTText text = run.getTArray()[k]; 

       // This will output the text contents 
       System.out.println(text.getStringValue()); 

       // And this will set its contents 
       text.setStringValue("Success!"); 
      } 
     } 
    } 

    try { 
     doc.write(new FileOutputStream("C:\\output.docx")); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

回答