c# Word互操作,粘贴剪贴板到段落

本文关键字:剪贴板 段落 Word 互操作 | 更新日期: 2023-09-27 18:09:33

我有一个报表构建器,我正在构建一个word报表的开始。然后Word将保持打开状态,供用户继续编写报告。报表构建器从要用作段落的数据库中获取rtf。对于每个rtf,在文档中创建一个段落,并将rtf添加到其中。

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

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

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下方。在MS-Word中如何按照我想要的方式插入rtf ?

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

c# Word互操作,粘贴剪贴板到段落

找到了解决方案,粘贴方法实际上粘贴在段落标签内,问题是当文本输入到富文本框中时,富文本框会自动添加段落标签,无论是否有任何开始。由于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";
}