微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个报告构建器,我正在制作报告的开头.然后保持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中的段落?

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐