如何使用.NET在Word文档中替换占位符为格式化文本?

3
我有一个C# .NET应用程序,需要加载一个Word文档,查找一些占位符文本(例如"<DETAILS>"),并将其替换为从RTF控件中提取的格式化文本。然后,将此最终文档作为电子邮件消息在Outlook中打开,准备发送。
所有这些都可以实现,但是我无法弄清楚如何将RTF控件中的格式应用到Word文档中。 RTF文本包含粗体,圆点和其他格式,并且文本长度超过256个字符,因此Word互操作查找和替换方法无法使用。
我可以使用Find方法,然后将所选文本设置为所需内容(避免了256个字符的限制),但我无论如何都无法弄清楚如何将格式应用到文本中。有一个FormattedText成员似乎可以完成此工作,但无论我分配什么给它(即使将其分配给自身),都会生成错误,因此我只能假设它应该是只读的。
但这是一个无关紧要的问题,因为RTF控件似乎只能提供没有格式的纯文本或包含RTF代码的字符串。似乎没有任何Word函数可以解释RTF代码,因此我目前只能用一些难以理解的RTF序列替换<DETAILS>占位符。
我一直在研究OpenXML API,它可能能够让我将格式化文本作为XML片段插入,但我看不到如何将RTF控件的内容作为要插入的XML片段。
有人知道如何实现吗?
1个回答

2
这应该能解决您的问题:
如何使用Visual Basic Automation将Rich Text Format字符串粘贴到Word中 解决方案是将RTF代码放入剪贴板并指定其为RTF格式。然后使用Wordapp.Selection.Paste将内容粘贴到Word中。Word知道如何处理RTF(它可以打开rtf文档并从剪贴板读取RTF数据)。
如果您使用此方法,请确保在操作之前存储剪贴板内容,并在操作后恢复剪贴板内容,用户不喜欢程序在未经通知的情况下更改剪贴板内容。(此方法仅更改剪贴板的RTF部分,剪贴板可以存储多种格式,因此您不必存储/恢复所有格式)

谢谢你的建议!我也得出了同样的结论,但不喜欢它的不可靠性,但我没有想到保存和恢复剪贴板内容,这将使它更好。不幸的是,第一次运行代码时它不会粘贴,但随后的执行可以正常工作。我想这就是你从这样一个丑陋的黑客中能期望的最好结果;-) - Malvineous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接