2014-10-19 59 views
1

我需要在docx-file中替換cerain單詞或短語並將其另存爲其他名稱。我知道我的問題不是唯一的,我嘗試在網絡上找到解決方案。但我仍然無法得到我需要的結果。如何使用Java編輯docx

我發現了兩種方法來解決我的任務,但在每種情況下都陷入了僵局。 1.展開docx,如zip文件,用主內容更改xml並重新打包歸檔。但在操作之後,我無法在MS Word中打開新的更改的docx。這很奇怪,因爲我可以通過手動執行類似的步驟(不使用Java,使用WinRar)並獲得正確的結果文件。 那麼你能解釋一下如何將docx內容存檔以使用Java來獲取正確的文件嗎?

  1. 使用外部API。我得到一個使用docx4j Java庫的建議。但是我可以用它來替換模板中的任何文字(我使用VariableReplace示例)中的標籤(如$ {label})。但是我想要改變我想要的單詞而不使用帶有標籤的模板。

我希望有所幫助。

+0

你試過apache-poi嗎? – Jayan 2014-10-19 16:18:21

回答

2

我有這段代碼。我希望它能幫助你解決你的問題。有了它,你可以從.docx中讀取你要改變的單詞。更改此詞並將新段落保存在新文檔中。

//WriteDocx.java 
    import org.apache.poi.xwpf.extractor.XWPFWordExtractor; 
    import org.apache.poi.xwpf.usermodel.*; 
    import java.io.*; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.StringTokenizer; 

    public class WriteDocx 
    { 
    public static void main(String[] args) throws Exception { 
     int count = 0; 
     XWPFDocument document = new XWPFDocument(); 
     XWPFDocument docx = new XWPFDocument(new FileInputStream("Bonjour1.docx")); 
     XWPFWordExtractor we = new XWPFWordExtractor(docx); 
     String text = we.getText() ; 
     if(text.contains("SMS")){ 
      text = text.replace("SMS", "sms"); 
      System.out.println(text); 
     } 
     char[] c = text.toCharArray(); 
     for(int i= 0; i < c.length;i++){ 

      if(c[i] == '\n'){ 
       count ++; 
      } 
     } 
     System.out.println(c[0]); 
     StringTokenizer st = new StringTokenizer(text,"\n"); 

     XWPFParagraph para = document.createParagraph(); 
     para.setAlignment(ParagraphAlignment.CENTER); 
     XWPFRun run = para.createRun(); 
     run.setBold(true); 
     run.setFontSize(36); 
     run.setText("Apache POI works well!"); 

     List<XWPFParagraph>paragraphs = new ArrayList<XWPFParagraph>(); 
     List<XWPFRun>runs = new ArrayList<XWPFRun>(); 
     int k = 0; 
     for(k=0;k<count+1;k++){ 
      paragraphs.add(document.createParagraph()); 
     } 
     k=0; 
     while(st.hasMoreElements()){ 
      paragraphs.get(k).setAlignment(ParagraphAlignment.LEFT); 
      paragraphs.get(k).setSpacingAfter(0); 
      paragraphs.get(k).setSpacingBefore(0); 
      run = paragraphs.get(k).createRun(); 
      run.setText(st.nextElement().toString()); 
      k++; 
     } 

     document.write(new FileOutputStream("test2.docx")); 
    }   
    } 

PS:XWPFDocument DOCX =新XWPFDocument(新的FileInputStream( 「Bonjour1.docx」))

必須與文件名從那裏您將要替換某些字變 「Bonjour1.docx」 或短語。 我用APACHE POI library 我需要一些代碼從這個網站HANDLING MS WORD DOCUMENTS USING APACHE POI

UPDATE enter image description here

+0

你使用了哪個jar文件? – 2015-10-11 17:10:05

+0

我用這個JAR:poi-3.11-20141221.jar,poi-excelant-3.11-20141221.jar,poi-ooxml-3.11-20141221.jar,poi-ooxml-3.11-schemas-20141221.jar,poi-scartchpad- 3.11-20141221.jar,xmlbeans-2.6.0.jar, – esprittn 2015-10-12 07:44:19