2016-04-13 21 views
-1

ApacheのpoiをJavaで使用して特定のプレースホルダを検索し、テキストテンプレートに置き換える必要があります。すべてのテーブル、行、セル、その中の各テキストを検索します。Apache POI - 単語文書のプレースホルダを検索

+1

サンプルデータとコードを追加できますか? PS:反復的な思考細胞よりも簡単な解決策はないと思います。 EDIT:found [この質問](http://stackoverflow.com/questions/3618763/find-excel-cell-by-text-in-apache-poi) – edasssus

+0

(XWPFTable tbl:doc。 getTables()){ため (XWPFTableRow行:tbl.getRows()){ため \t(XWPFTableCell細胞:row.getTableCells())のために{ \t \t(XWPFParagraphのP:cell.getParagraphs()){ \t \t for(XWPFRun r:p.getRuns()){ \t \t文字列テキスト= r.getText(0); \t \t if(text!= null &&(text.equalsIgnoreCase( "$ comment"))){ // do something} }}} –

答えて

2

私のプロジェクトhttps://github.com/centic9/poi-mail-mergeを見てみましょう。

基本的には、文書という単語のXML表現を取得し、置換して結果を文書に戻します。

I.e.

CTBody body = doc.getDocument().getBody(); 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 

    // read the current full Body text 
    String srcString = body.xmlText(); 

    ... do the replacements in srcString 

    XmlOptions optionsOuter = new XmlOptions(); 
    optionsOuter.setSaveOuter(); 
    String srcString = src.xmlText(); 
    String prefix = srcString.substring(0,srcString.indexOf(">")+1); 

    final String mainPart; 
    // exclude template itself in first appending 
    if(first) { 
     mainPart = ""; 
    } else { 
     mainPart = srcString.substring(srcString.indexOf(">")+1,srcString.lastIndexOf("<")); 
    } 

    String sufix = srcString.substring(srcString.lastIndexOf("<")); 
    String addPart = append.substring(append.indexOf(">") + 1, append.lastIndexOf("<")); 
    CTBody makeBody = CTBody.Factory.parse(prefix+mainPart+addPart+sufix); 
    src.set(makeBody); 

置き換えが複数のフォーマットに分かれていると、実装が混乱することに注意してください。置換タグの一部が太字である場合、これは動作する方法に固有のものです。

+0

回答ありがとうございました。ドキュメント内の特定のテーブル(セクション)に$プレースホルダーがあります。 –

関連する問題