如何在 C# 中将文本从 RTF 插入到 Word 文档
How to insert text from RTF to Word Document in c#
我正在使用 winservice 创建 Word 文档。
我唯一的问题是将 rtf 粘贴到单词选择中。
我有这个代码:
private static void PasteRtf(object bookmarkName,
OFFICE.Application wordApplication,
Document wordDocument, string rtfText, bool winservice)
{
if(bookmarkName == null ||
wordApplication == null ||
wordDocument == null) return;
if (!winservice)
{
Clipboard.Clear();
Clipboard.SetText(rtfText, TextDataFormat.Rtf);
IDataObject formatedText = Clipboard.GetDataObject();
if (formatedText != null)
{
wordDocument.Bookmarks[bookmarkName].Range.Select();
Selection sel = wordApplication.Selection;
sel.Paste();
}
Clipboard.Clear();
}
else
{
????
}
}
你知道如何在不使用剪贴板的情况下做到这一点吗?
如果您的 RTF 文本(或 Word,或任何其他兼容格式)位于文件中,您可以使用 Range.InsertFile 或 Bookmark.InsertFile 方法:
string FileName = "C:\Sales.docx";
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
bookmark1.InsertFile(FileName, ref missing, ref ConfirmConversions, ref Link, ref Attachment);
Word 需要转换器才能将 RTF 格式集成到文档中。转换器 运行 仅当
- 内容是从剪贴板粘贴的(您说您不需要)
- 一个文件被打开或插入(这是 SashaDu 建议的,你也不想要)
没有将 "streaming" RTF(或 HTML,就此而言)转换为 Word 文档的选项。
唯一的其他可能性是您首先将 RTF 转换为 OOPC 平面文件格式的有效 WordOpenXML。可以使用 Word 的 Range.InsertXml 方法将其插入到文档中。可能有第三方工具可以为您执行此操作。或者您需要编写自己的 RTF->WordOpenXML 转换器。
解决方案:
wordDocument.Bookmarks[bookmarkName].Range.Select();
Selection sel = wordApplication.Selection;
wf.RichTextBox tb = new wf.RichTextBox();
tb.Rtf = rtfText;
string fileName = Path.Combine(UserInfo.User.TempPath,
Guid.NewGuid() + ".rtf");
tb.SaveFile(fileName, wf.RichTextBoxStreamType.RichText);
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
object lMissing = System.Reflection.Missing.Value;
sel.InsertFile(fileName, ref lMissing, ref ConfirmConversions, ref Link, ref Attachment);
File.Delete(fileName);
我正在使用 winservice 创建 Word 文档。
我唯一的问题是将 rtf 粘贴到单词选择中。
我有这个代码:
private static void PasteRtf(object bookmarkName,
OFFICE.Application wordApplication,
Document wordDocument, string rtfText, bool winservice)
{
if(bookmarkName == null ||
wordApplication == null ||
wordDocument == null) return;
if (!winservice)
{
Clipboard.Clear();
Clipboard.SetText(rtfText, TextDataFormat.Rtf);
IDataObject formatedText = Clipboard.GetDataObject();
if (formatedText != null)
{
wordDocument.Bookmarks[bookmarkName].Range.Select();
Selection sel = wordApplication.Selection;
sel.Paste();
}
Clipboard.Clear();
}
else
{
????
}
}
你知道如何在不使用剪贴板的情况下做到这一点吗?
如果您的 RTF 文本(或 Word,或任何其他兼容格式)位于文件中,您可以使用 Range.InsertFile 或 Bookmark.InsertFile 方法:
string FileName = "C:\Sales.docx";
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
bookmark1.InsertFile(FileName, ref missing, ref ConfirmConversions, ref Link, ref Attachment);
Word 需要转换器才能将 RTF 格式集成到文档中。转换器 运行 仅当
- 内容是从剪贴板粘贴的(您说您不需要)
- 一个文件被打开或插入(这是 SashaDu 建议的,你也不想要)
没有将 "streaming" RTF(或 HTML,就此而言)转换为 Word 文档的选项。
唯一的其他可能性是您首先将 RTF 转换为 OOPC 平面文件格式的有效 WordOpenXML。可以使用 Word 的 Range.InsertXml 方法将其插入到文档中。可能有第三方工具可以为您执行此操作。或者您需要编写自己的 RTF->WordOpenXML 转换器。
解决方案:
wordDocument.Bookmarks[bookmarkName].Range.Select();
Selection sel = wordApplication.Selection;
wf.RichTextBox tb = new wf.RichTextBox();
tb.Rtf = rtfText;
string fileName = Path.Combine(UserInfo.User.TempPath,
Guid.NewGuid() + ".rtf");
tb.SaveFile(fileName, wf.RichTextBoxStreamType.RichText);
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
object lMissing = System.Reflection.Missing.Value;
sel.InsertFile(fileName, ref lMissing, ref ConfirmConversions, ref Link, ref Attachment);
File.Delete(fileName);