1

Javaを使用してdocxドキュメントを操作するためにApache POIを使用しています。原理は簡単です:

  • データを表示するための基本テンプレートがあります (テキスト、タイトル、表を含む)
  • テンプレートを満たすデータがあります
  • データ行ごとに繰り返されるテンプレートを含む最終ドキュメントを作成する必要があります

テンプレートドキュメントの読み込みに成功し、何も含まない最終的なドキュメントオブジェクトも作成しました(必要なスタイルを含む空のドキュメントから作成したため、失われません)。段落や表を参照してテンプレートのデータ フィールドを変更することはできますが、変更された内容を最終ドキュメントにコピーすることはできません。

基本的に、これは私が持っているものです:

for (int i=0; i<10; i++) {
  finalDoc.removeBodyElement(i);
}
for (int i=0; i<10; i++) {
    //EditableDocX is a subclass of XWPFDocument, for purpose of my project
    EditableDocX document = new EditableDocX("template.docx");  

    replacementMap.put("[field1]", "Content1_"+i);
    replacementMap.put("[field2]", "Content2_"+i);

    document.replaceWithMap(replacementMap);  //I've have this working
    finalDoc.addContentOfDoc(document);   //I don't have this working :(
}
finalDoc.saveFile("result.docx");

documentオブジェクトの内容をオブジェクトの最後にコピーする方法はありfinalDocますか? (段落と表があり、スタイルがあります)

4

1 に答える 1

2

私はライブラリを変更することになりました.docx4jは、私がやりたいことに対してより便利です。参考までに、ドキュメントを別のドキュメントの最後に追加するために必要なコードは次のとおりです。

public static void append(WordprocessingMLPackage docDest, WordprocessingMLPackage docSource) {
    List<Object> objects = docSource.getMainDocumentPart().getContent();
    for(Object o : objects){
        docDest.getMainDocumentPart().getContent().add(o);
    }
}

これは私にとってはうまくいきます.docSourceからdocDestにコンテンツをコピーし、フォーマットを維持します.

于 2013-05-17T14:34:34.573 に答える