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