如何使用.NET替换Word文档中带格式文本的占位符?

时间:2011-05-10 04:12:15

标签: .net ms-word rtf office-interop

我有一个C#.NET应用程序需要加载Word文档,找到一些占位符文本(例如“< DETAILS>”)并将其替换为从RTF控件中提取的格式化文本。然后,此最终文档将作为Outlook中的电子邮件打开,准备发送。

所有这一切都有效,除了我无法弄清楚如何将格式从RTF控件转换到Word文档。 RTF文本包含粗体,点和其他格式,文本长度超过256个字符,因此Word互操作查找和替换方法将无法正常工作。

我可以使用Find方法,然后将选择文本设置为我想要的(避免256个字符限制),但我不能为我的生活找出如何进行格式化。有一个FormattedText成员似乎可以完成这项工作,但无论我分配给它(甚至将它分配给它自己)都会产生错误,所以我只能假设它是只读的。

但这是一个没有实际意义的点,因为RTF控件似乎只能提供没有格式化的纯文本或包含RTF代码的字符串。似乎没有任何Word函数来解释RTF代码,所以我现在所能做的就是替换< DETAILS>占位符有一些难以理解的RTF序列。

我一直在调查OpenXML API,它可能允许我将格式化文本作为XML片段插入,但我无法看到如何将RTF控件的内容作为要插入的XML片段获取。

有谁知道可以实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

这可以解决你的问题:
How to paste a Rich Text Format string into Word with Visual Basic Automation

解决方案是将RTF代码放在剪贴板中并指定它是RTF格式。然后使用Wordapp.Selection.Paste将内容粘贴到word。 Word知道如何处理RTF(它可以打开rtf文档并从剪贴板读取RTF数据)。

如果您使用此方法,请确保在操作之前存储剪贴板内容,并在之后恢复剪贴板内容,用户不喜欢程序自行更改剪贴板内容而不另行通知。 (此方法仅更改剪贴板的RTF部分,剪贴板可以存储多种格式,因此您无需存储/恢复所有格式)