2014-07-09 205 views
1

我想在MS Word文檔中的現有表中添加一個新行。我使用POI 3.10,hwpf庫。但是執行這個程序後,文件崩潰了,MS Word出現了一條警告信息。所有內容看起來很奇怪,而且沒有格式化。Java Apache POI將新行添加到現有表中。 Word文檔

示例如下:

InputStream fin = new FileInputStream(args[0]); 
    POIFSFileSystem fs = new POIFSFileSystem(fin); 

    HWPFDocument doc = new HWPFDocument(fs); 
    Range range = doc.getRange(); 

    range.getParagraph(269).insertAfter("TEST"); 
    doc.write(new FileOutputStream("SOME PATH")); 

也許一些額外的應更新(SI,DSI的如。),因爲添加了新的CharacterRun?

+0

提出的警告信息是什麼? – Jacinda

+0

嗨,消息聽起來像這樣:「本文件中的表格已損壞。」 – Oljko

回答

1

Word97/2000格式的DOC文件僅在HWPF的簡單變體中受支持。表格已經很關鍵。如果Word拒絕一個您使用庫創建/修改的文件,那麼您可能運氣不佳。

我前段時間爲一位客戶開發了一個基於Apache HWPF代碼庫的定製庫。該自定義庫增加了對許多功能的支持,並可以可靠地編寫Word文件。把所有這些事情都做好是很多的工作。所以只是修復小事是不可能的。你將不得不花幾個月的時間。

是否可以選擇在Word中創建空行並使用HWPF填充它們?

編輯:可能的功能解決方法:

預先填寫表標記:

+--------+-------------+------------------------------------+ 
| Rev 1 | 2014-01-01 | Created document     | 
+--------+-------------+------------------------------------+ 
| Rev 2 | 2014-01-02 | Corrected flow chart    | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 
| $REVMRK| $REVDATE## | $REVTEXT########################## | 
+--------+-------------+------------------------------------+ 

確保標記是足夠長的時間。 (在HWPF添加文本,使段落的地址表中更改可能導致故障。)

來一補行做到這一點:

  1. 找到一組標記一行
  2. 每個標記必須包括所有後續#-characters
  3. 準備你的文字來填充在每個標記
  4. 確保您的文字只使用ASCII字符(見下文)
  5. 確保您的文字是不長於修訂標記
  6. 填寫修訂標記與新的內容,並填寫剩餘#-characters用空格

如果軟件沒有找到一個新行,必須有人在Word中添加新行的模板。

原因一些限制:

沒有插入:很多東西都存儲與地址轉換成文本流(大量包含了文本內容地址引用內部多餘的表格)。這適用於段落邊界,字符格式,表格標記,書籤,圖形引用等。HWPF覆蓋了一些內容,很多內容都沒有。如果您插入文本,地址可能會移位並且Word文件可能會損壞。

ASCII範圍:文本的順序存儲爲每個字符1個字節或每個字符2個字節。在正確的情況下,在1字節範圍內插入非ASCII字符需要將該範圍轉換爲2字節範圍。這在HWPF中並不總是很好,它會導致地址移位(參見上面的「無插入」)。

如果您的文檔「更簡單」,您可能會受到一些限制。例如:沒有文本框更好。沒有嵌入式圖紙更好。沒有嵌套表更好。但是,通常這些限制非常嚴格,您可以使用純文本文檔並給它一個.doc擴展名。

讓我知道,如果你需要更多的細節。

+0

感謝Rainer的信息。這個程序的目的是更新現有文檔中的修訂歷史,修訂歷史章節是一個表格。我需要以某種方式更新此表格以提供新信息。你有什麼建議我可以做到嗎? – Oljko

+0

@Oljko:我會用建議更新我的答案。 –

+0

嗨@Rainer,好主意,我需要與客戶談判對他來說可以。還有一個問題,是否有可能通過這種方式解決這個問題: – Oljko

相關問題