C#Word Interop,将剪贴板粘贴到段落中

时间:2011-09-22 11:23:58

标签: c# interop ms-word clipboard rtf

我正在制作一个报告构建器,用于构建报告的开头。然后保持Word打开以供用户继续报告。报表生成器从要用作段落的数据库中获取rtf。对于每个rtf,在文档中创建一个段落并添加rtf。

我读过的内容似乎暗示如果我想将rtf插入到word文档中,那么我将其放入剪贴板然后将其从剪贴板粘贴到word中。这工作正常,但这实际上并没有把它放入段落我想要的方式。当调用paste方法时,它实际上并没有将rtf放在段落范围内,只是将它粘贴到段落开始的位置。它没有覆盖段落,段落仍然存在于我粘贴的rtf块之下。将范围移动一个以容纳段落标记不起作用,它只是将其粘贴在段落下方。我认为它需要使用的是一个Insert()方法,而不是一个Paste()方法,但我不知道如何去做这个,我找不到任何有关如何去做的信息。我可以从构建块插入或插入纯文本,但这里插入的内容需要格式化文本。格式化的文本具有不同用户制作的样式等。

复制到剪贴板和粘贴的代码如下:

Clipboard.SetText(richTextBox1.Rtf, TextDataFormat.Rtf);
oPara[i].Range.Paste();

我知道您可以将构建块插入到段落中,这样可以保留段落格式,具体如下:

tTemplate.BuildingBlockEntries.Item(foundList[i]).Insert(oPara[i].Range.FormattedText);

但我无法找到你在我的方案中如何实现这一目标。

我想将其插入段落的原因是编辑格式的某些方面,并确保不会破坏页面间的行等。

我目前用于创建和插入的代码是:

Word.Paragraph[] oPara = new Word.Paragraph[foundList.Count];

for (int i = 0; i < foundList.Count; i++)
{
    oPara[i] = oDoc.Content.Paragraphs.Add();
    Clipboard.SetText(foundList[i].Paragraph, TextDataFormat.Rtf);
    oPara[i].Range.InsertParagraphAfter();
    oPara[i].Range.Paste();
    oPara[i].KeepTogether = -1;
    oPara[i].Range.Font.Size = 10;
    oPara[i].Range.Font.Name = "Arial";
}

我检查过哪一段与视线完全在一起

oPara[0].Range.Select(); //To see first paragraph

结果是rtf粘贴在段落开始处,而段落恰好在rtf粘贴之下。 你会如何以我想要的方式将rtf插入MS-Word中的段落?

编辑:调用崩溃方法不会做我想要发生的事情

1 个答案:

答案 0 :(得分:2)

找到解决方案,粘贴方法实际上粘贴在段落标签内,问题是当文本输入到富文本框时,富文本框会自动添加段落标记,无论是否有任何开头。由于rtf有段落标记,因此将其视为不同的段落。因此,数据库中的rtf具有由富文本框而不是用户添加的段落标记。为了解决这个问题,我刚刚从数据库中删除了rtf中的段落标记。这是我最终得到的代码:

for (int i = 0; i < foundList.Count; i++)
{
    oPara[i] = oDoc.Content.Paragraphs.Add();
    string tempS = foundList[i].Paragraph;
    tempS = tempS.Replace("\\pard", "");
    tempS = tempS.Replace("\\par", "");
    Clipboard.SetText(tempS, TextDataFormat.Rtf);
    oPara[i].Range.InsertParagraphAfter();
    oPara[i].Range.Paste();
    oPara[i].KeepTogether = -1;
    oPara[i].Range.Font.Size = 10;
    oPara[i].Range.Font.Name = "Arial";
}