2010-08-02 75 views
1

我需要替換WinWord文檔中的某些文本。問題是,我使用replaceText函數對Range執行的任何文本替換都會創建一個損壞的WinWord文件,除非替換字符串和替換字符串的長度完全相同。我們將處理動態內容,所以這不會。使用Apache POI的WinWord文檔中的文本替換

Range對象規格: http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String,java.lang.String中)

的replaceText函數有一個可選的第三個參數,一個int,以指定某種偏移。我想也許這可能是解決方案,但參數甚至無法處理負值,這使得替換很難或不可能,除非偏移量(replacement.length() - replaced.length())爲正值。但是,我可能需要它是負面的。總之,文檔中沒有任何內容似乎意味着如果其他兩個參數的長度不相等,則需要此偏移參數。

這裏是我的代碼: (假設a.doc只包含「caaaaaaake」)

 String inputFilename = "C:\\\a.doc"; 

     String outputFilename = "C:\\b.doc"; 
     POIFSFileSystem fs = null; 
     FileInputStream fis = new FileInputStream(inputFilename); 
     fs = new POIFSFileSystem(fis); 

     HWPFDocument doc = new HWPFDocument(fs); 

     Range range = doc.getRange(); 
     range.replaceText("caaaaaaake", "piiiie"); 


     FileOutputStream fos = new FileOutputStream(outputFilename); 
     doc.write(fos); 

     fis.close(); 
     fos.close(); 

的代碼執行沒有問題,但它創建了一個斷字的文件。 我能做什麼?

+0

的文件中用piiiie打開就好了。對不起,我不能建議POI修復,但如果你剛剛開始,你可以考慮其他免費選項,如[JODReports] [1]或[Docmosis] [2]。它們很方便,但需要更大的基礎設施,因爲您需要安裝OpenOffice來幫助進行格式轉換。 [1]:http://jodreports.sourceforge.net/ [2]:http://www.docmosis.com – 2010-08-03 02:56:40

+0

謝謝,但不幸的是,我不能依賴OpenOffice。 Docmosis提到使用WinWord文件,但我需要一種文本替換方法,我無法在其API中找到它。 – Amalgovinus 2010-08-03 16:13:22

+0

我有同樣的問題。即使刪除替換。我只是通過'HWPFDocument doc = new HWPFDocument(new POIFSFileSystem(new FileInputStream(path)));'然後編寫'try(FileOutputStream out = new FileOutputStream(filePath))來讀取輸入文件{doc.write(out); }'。但它會生成損壞的文件。 – Bagdat 2016-10-05 05:00:07

回答

1

我相信,當你到達poi 3.8時,這個問題就解決了。使用beta5時,此代碼適用於我。生成的word文件可以在你的caaaaaaake曾經是

相關問題