2011-09-15 13 views
3

Apache POIを使用してMicrosoft Word文書を更新しようとしています。 mswordドキュメントは、 "$ {place.holder}"という形式のプレースホルダを数多く含むテンプレートであり、ホルダを特定の値に置き換えるだけです。私がこれまでに得たものは、Apache POIでMSWord文書を更新する

private void start() throws FileNotFoundException, IOException { 

    POIFSFileSystem fsfilesystem = null; 
    HWPFDocument hwpfdoc = null; 

    InputStream resourceAsStream = getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");  
    try { 
     fsfilesystem = new POIFSFileSystem(resourceAsStream); 
     hwpfdoc = new HWPFDocument(fsfilesystem); 
     Range range = hwpfdoc.getRange(); 

     range.replaceText("${rma.number}","08739"); 
     range.replaceText("${customer.name}", "Roger Swann"); 

     FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\updatedTemplate.doc")); 
     hwpfdoc.write(fos); 
     fos.flush(); 
     fos.close(); 

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

} 

です。プログラムはエラーなく実行されます。 Hexエディタで出力ファイルを調べると、プレースホルダがプログラムに置き換えられていることがわかります。しかし、MSWordで文書を開こうとすると、MSWordがクラッシュします。

私には欠けているステップ(一連のステップ)がありますか、それとも基本的に私はこれで運が悪いのですか?置換テキストの長さが置き換えられたテキストの長さと同じではないため、カウンタを調整する必要がありますか?

よろしく

+0

getClass().getResourceAsStream("/path/to/document/templates/RMA FORM.doc");のは、あなたは、POI 3.8ベータ4を試みたことがありますか?最近、HWPFでの.DOC処理について多くの作業が行われていますので、修正されていることがあります。 – Gagravarr

+0

3.8ベータ4で試してみましたが、今は文書を開くことができますが、内容は大きく壊れています。私はプログラムから更新プログラムを削除しようとしました。私がやっているのは.docを開いて書き直しても、まだデータが破損しているからです。 – user497087

+0

おそらくPOI bugzillaにバグを報告し、 – Gagravarr

答えて

0

使用new FileInputStream()代わり

+0

これがなぜ役立つのかを明確にすることはできますか? – Gagravarr

関連する問題