2017-09-28 9 views
0

私はapache POIの完全な初心者です。私はすでにいくつか試してみました。私の問題は、私はdocx-Fileにいくつかのブックマークがあり、それらの値を置き換えることです。ブックマークの値を読んで、ポップアップで置き換える方法POI

は、私はすでにこれまでのところ私は、ブックマークにテキストを追加することを得たが、以前の値がまだそこにある

私のコード:

InputStream fis = new FileInputStream(fileName); 
XWPFDocument document = new XWPFDocument(fis); 
List<XWPFParagraph> paragraphs = document.getParagraphs(); 
for (XWPFParagraph paragraph : paragraphs) 
{ 
    //Here you have your paragraph; 
    CTP ctp = paragraph.getCTP(); 
    // Get all bookmarks and loop through them 
    List<CTBookmark> bookmarks = ctp.getBookmarkStartList(); 
    for(CTBookmark bookmark : bookmarks) 
    { 
     if(bookmark.getName().equals("Firma1234")) 
     { 
      System.out.println(bookmark.getName()); 
      XWPFRun run = paragraph.createRun(); 
      run.setText(lcFirma); 
         ctp.getDomNode().insertBefore(run.getCTR().getDomNode(), bookmark.getDomNode()); 
     } 
    } 
} 
OutputStream out = new FileOutputStream(output); 
document.write(out); 
document.close(); 
out.close();  

「lcFirma」の値が「ファーマ」である 後

Testmark -> name=Firma1234 

私のDOCX-ファイル:

ブックマークの値は、前 私のdocxファイル・ファイル "Testmark" であります
FirmaTestmark 

私はテキストを置き換えるのではなく、ブックマークの値の前に挿入すると言いましたが、代わりにテキストを置き換えますか?

挨拶、

ケビン

答えて

-1

コード

private List<XWPFParagraph> collectParagraphs() 
    { 
     List<XWPFParagraph> paragraphs = new ArrayList<>(); 
     paragraphs.addAll(this.document.getParagraphs()); 

     for (XWPFTable table : this.document.getTables()) 
     { 
      for (XWPFTableRow row : table.getRows()) 
      { 
       for (XWPFTableCell cell : row.getTableCells()) 
        paragraphs.addAll(cell.getParagraphs()); 
      } 
     } 
     return paragraphs; 
    } 

    public List<String> getBookmarkNames() 
    { 
     List<String> bookmarkNames = new ArrayList<>(); 
     Iterator<XWPFParagraph> paraIter = null; 
     XWPFParagraph para = null; 
     List<CTBookmark> bookmarkList = null; 
     Iterator<CTBookmark> bookmarkIter = null; 
     CTBookmark bookmark = null; 
     XWPFRun run = null; 

     // Get an Iterator for the XWPFParagraph object and step through them 
     // one at a time. 
     paraIter = collectParagraphs().iterator(); 
     while (paraIter.hasNext()) 
     { 
      para = paraIter.next(); 

      // Get a List of the CTBookmark object sthat the paragraph 
      // 'contains' and step through these one at a time. 
      bookmarkList = para.getCTP().getBookmarkStartList(); 
      bookmarkIter = bookmarkList.iterator(); 
      while (bookmarkIter.hasNext()) 
      { 
       bookmark = bookmarkIter.next(); 
       bookmarkNames.add(bookmark.getName()); 
      } 
     } 
     return bookmarkNames; 
    } 
+0

の下に試してみてください、私は何かをmissunderstandか、またはあなたのコードは、ちょうどすべてのbookmarknamesを取得していますか?ブックマークの値を置き換える部分はどこですか? –

関連する問題