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有段落标记,因此将其视为不同的段落.因此,数据库中的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"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |