2011-03-25 114 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