2011-03-25 74 views
2

將HTML片段粘貼到Word文檔中比通過C#中的剪貼板更好嗎?Word自動化多次粘貼問題

using Word = Microsoft.Office.Interop.Word; 

我使用一些代碼,使HTML到剪貼板:有

HtmlFragment.CopyToClipboard(changedText); 

我在字的選擇(從formfield)和我做的:

word.Selection.Paste(); 

但有時它只會拋出一個COM異常。如果我加

Thread.Sleep(100); 

我可以得到它的工作,但這並不理想。

Insert方法看起來像一個更好的選項,但沒有從HTML插入。

那麼什麼是使用自動化界面快速插入大量HTML片段到Word中的最佳方式?

編輯

一些好的建議的反應,但問題竟然是一個簡單的<br>標籤導致Word將無法上粘貼。

回答

4

對於互操作,而不是Selection.Paste,你會想要使用Selection.PasteSpecialWdPasteDataTypewdPasteHTML

如果您使用的是Word(即2007/2010)的新格式,您可以放棄所有的互操作,只需使用WordprocessingML(使用Open XML SDK或只是將其與Linq和System.IO一起隨意使用)。打包)。或者如果這是需要的話,您可以將其與Interop一起使用。

如果您使用Open XML,則只需使用altChunk即可導入HTML。以下是一個示例(其中包含HTML的示例),地址爲How to Use altChunk for Document Assembly。另一種(新聞 - 今天發佈):Importing HTML that contains Numbering using altChunk

+0

感謝您的建議,事實證明這個問題非常簡單:試圖通過使用HTML的剪貼板將
粘貼到word中失敗。無論如何給你一個+1。 – 2011-04-01 03:15:24

+0

我有同樣的問題,我試過你sait但wdPasteHTML給出錯誤「命令失敗」? – user983924 2013-08-15 13:38:05

2

+1對於Otaku的評論,雖然一般來說,我發現最好使用各種RANGE。*函數來粘貼數據而不是Selection對象,或者粘貼剪貼板。主要的原因是,如果你通過剪貼板粘貼,你會拼湊在剪貼板上的任何東西(這可能不是用戶想要發生的)。

Selection對象適用於所有打開的Word文檔,這可能會在某些情況下造成麻煩。不幸的是,有幾件事你不能做任何其他的事情。

而且,還有一些事情(如改變當前光標位置的文本),您必須使用選擇對象。

+0

+1同意。通常,'Range'比'Selection'更好,在互操作環境中更加合適。 – 2011-03-28 22:10:15

+0

感謝您的建議,事實證明這個問題非常簡單:試圖通過使用HTML的剪貼板將
粘貼到word中失敗。無論如何給你一個+1。 – 2011-04-01 03:15:47

+1

我看不到Range對象中允許插入HTML的函數,你知道有沒有函數? – 2012-04-13 10:01:02