Word Automation多重粘贴问题

时间:2011-03-25 21:14:18

标签: c# ms-word ms-office office-interop

是否有更好的方法将HTML片段粘贴到Word文档中,而不是通过C#中的剪贴板粘贴?

using Word = Microsoft.Office.Interop.Word;

我正在使用一些将HTML放入剪贴板的代码:

HtmlFragment.CopyToClipboard(changedText);

我有一个单词选择(来自一个表格),我做:

 word.Selection.Paste();

但有时它会引发COM异常。如果我添加

  Thread.Sleep(100);

我可以让它发挥作用,但这并不理想。

Insert方法看起来更好,但没有来自HTML的插入。

那么使用自动化界面快速将大量HTML片段插入Word的最佳方法是什么?

修改

回复中有一些很好的建议,但问题结果是一个简单的<br>标记导致单词在粘贴时失败。

3 个答案:

答案 0 :(得分:4)

对于互操作,而不是Selection.Paste,您需要Selection.PasteSpecial使用WdPasteDataType wdPasteHTML

如果你正在使用Word的新格式(即2007/2010),你可以放弃互操作,只需使用WordprocessingML(使用Open XML SDK或者只需将其与Linq和System一起使用.IO.Packaging)。或者如果需要的话,你可以和Interop一起使用它。

如果您使用的是Open XML,则可以使用altChunk导入HTML。以下是How to Use altChunk for Document Assembly的示例(包含HTML示例)。另一个(新闻出版社 - 今天发布):Importing HTML that contains Numbering using altChunk

答案 1 :(得分:2)

但是,对于Otaku的评论,

+1,一般来说,我发现最好使用各种RANGE。*函数来粘贴数据而不是选择对象,或粘贴到剪贴板。主要原因是,如果您通过剪贴板粘贴,则会对剪贴板上的任何内容进行加密(这可能不是用户想要发生的事情)。

Selection对象适用于所有打开的word文档,在某些情况下会让你遇到麻烦。不幸的是,有些事情你不能做任何其他事情。

并且,有些事情(比如在当前光标位置改变文本)你必须使用选择对象。

答案 2 :(得分:0)

+1 到 DarinH 评论。另外需要注意的是,您可以使用 Range 粘贴到文档中的任何位置,而无需更改文档的选择(文档中的光标)。

有时 PasteAndFormat 会在新创建的文档上抛出异常,如果发生这种情况,请在此处查看我的回复:https://stackoverflow.com/a/65796482/15001063