Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用.NET将Word文档中的占位符替换为格式化文本?_.net_Ms Word_Rtf_Office Interop - Fatal编程技术网

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

如何使用.NET将Word文档中的占位符替换为格式化文本?,.net,ms-word,rtf,office-interop,.net,Ms Word,Rtf,Office Interop,我有一个C#.NET应用程序,它需要加载Word文档,找到一些占位符文本(例如“”),并用从RTF控件提取的格式化文本替换它。最后一个文档将在Outlook中以电子邮件的形式打开,准备发送 所有这些都可以工作,只是我不知道如何将格式从RTF控件转换到Word文档中。RTF文本包含粗体、点和其他格式,文本长度超过256个字符,因此单词interop find and replace方法无法工作 我可以使用Find方法,然后将选择文本设置为我想要的内容(避免256个字符的限制),但我一辈子都不知道如

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

所有这些都可以工作,只是我不知道如何将格式从RTF控件转换到Word文档中。RTF文本包含粗体、点和其他格式,文本长度超过256个字符,因此单词interop find and replace方法无法工作

我可以使用Find方法,然后将选择文本设置为我想要的内容(避免256个字符的限制),但我一辈子都不知道如何将格式转换为其他格式。有一个FormattedText成员似乎可以完成这项工作,但无论我分配给它什么(甚至分配给它自己)都会产生错误,因此我只能假设它是只读的

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

我一直在研究OpenXMLAPI,它可能允许我将格式化文本作为XML片段插入,但我不知道如何将RTF控件的内容作为要插入的XML片段


有人知道实现这一目标的方法吗?

这应该可以解决您的问题:

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


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

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