2011-09-16 23 views
4

Apache POI 3.8beta4を使用して編集しようとしているMicrosoft Word 2007/xml .docxファイルがあります。ドキュメントには、とりわけ、置き換える必要がある$ {place.holder}の形式でプレースホルダを保持するセルを含むテーブルが含まれています。私がこれまでにしてきたのは、Apache POIを使用してMicrosoft Word 2007/xmlの.docxファイルを更新すると、テキストが置換されずに追加されますか?

InputStream resourceAsStream = getClass().getResourceAsStream("/path/to/templates/rma.docx");  
    try { 
     XWPFDocument xwpfdoc = new XWPFDocument(resourceAsStream); 

     FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\newTemplate.docx")); 

     for (XWPFTable table : xwpfdoc.getTables()) { 

      for (XWPFTableRow row : table.getRows()) { 

       for (XWPFTableCell cell : row.getTableCells()) { 

        String data = cell.getText(); 

        if (data.contains("${rma.number}")) { 
         cell.setText("08739"); 
        } 

        if (data.contains("${customer.name}")) { 
         cell.setText("Roger Swann"); 
        } 
       } 
      } 
     } 
     xwpfdoc.write(fos); 
     fos.flush(); 
     fos.close(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    } 

問題がcell.setText(「置換テキストは」}代わりにそれを交換する既に存在している文字列データに付加するので、私は、完成した文書にで終わることは、文字列「{場所でされていることです。ホルダー}置換テキスト」。

どのようにテキストを置き換えるのではなく、それに追加しますか?

よろしく

答えて

1

クイックフィックスは、細胞の基本的なテキストランを取得し、それを変更することです。それはですちょっと怪しいですが、それはできます。おそらく012に電話したいと思うでしょうと入力し、テキストを含むものを探します。次に、セルを直接変更しようとするのではなく、そのテキストを変更します。

長期的なものは、POI bugzillaに新しいバグを開くことです。失敗した単体テストをアップロードする。これにはおそらくあなたのファイルが含まれていて、テキストの「置き換え」を表示してから、保存、再読み込み、および読み込みを行うべきです。問題は後で修正できます

+0

はい、setText(String、int)メソッドを使用する場合、XWPFRunレベルに移行します。ストレートsetText(String)を使用すると、追加されます。 – user497087

+0

バグを報告することをお勧めします。 :) – Gagravarr

1
cell.removeParagraph(0); 
cell.setText(entrada.getValue()); 
+1

私は理解していない - "entrada"変数は何ですか? –

関連する問題