Tob*_*ias 7 c# add-in ms-word ms-office office-interop
我正在写一个单词的插件来自动编辑协议模板.
在模板中是一个表,我想提取/复制此表中单元格的格式化文本.
现在我这样做:
Range formattedText = agendaTable.Rows[i].Cells[1].Range;
string temp = formattedText.WordOpenXML;
Run Code Online (Sandbox Code Playgroud)
后来我想将文本粘贴到另一个表格单元格中:
otherTablesRow.Cells[1].Range.InsertXML(temp);
Run Code Online (Sandbox Code Playgroud)
格式化是正确的,除了最后的换行符("\ r \n"),它来自我从单元格中提取文本的范围.似乎word使用linebreak标记单元格结束.
因此,在将文本插入其他表格单元格后,我有两个换行符.我怎样才能避免重复的换行?有人知道检索单元格内容的替代方法吗?
更新:可能是我用另一种方式提问.
我的整体问题是将多个格式化文本范围复制到内存中,然后将其粘贴到同一文档中的某个位置.
您可以通过以下方式复制并粘贴选择:
public void Copy()
{
var selection = (Range)Application.Selection;
selection.Copy();
}
public void Paste()
{
var selection = (Range)Application.Selection;
selection.PasteSpecial();
}
Run Code Online (Sandbox Code Playgroud)
第一个选择是您从中复制的位置,第二个选择是复制副本的粘贴位置。
编辑:不使用剪贴板复制格式化文本(这是简单的 XML 复制):
List<string> copies = new List<string>();
public void Copy()
{
Microsoft.Office.Interop.Word.Selection wordSelection = Application.Selection;
if (wordSelection != null && wordSelection.Range != null)
{
copies.Add(wordSelection.get_XML());
}
}
public void Paste(int index)
{
Microsoft.Office.Interop.Word.Selection wordSelection = Application.Selection;
if (wordSelection != null && copies.Count > index)
{
wordSelection.InsertXML(copies[index]);
}
}
Run Code Online (Sandbox Code Playgroud)
尝试以下代码,它将文本和格式从一个单元格复制到另一个单元格:
var copyFrom = agendaTable.Rows[i].Cells[1].Range;
var copyTo = otherTablesRow.Cells[1].Range;
copyFrom.MoveEnd(WdUnits.wdCharacter, -1);
copyTo.FormattedText = copyFrom.FormattedText;
Run Code Online (Sandbox Code Playgroud)
有一个 单元结束字符在agendaTable范围是弄乱了你的榜样靶细胞; 使用MoveEnd,我们可以复制除单元格字符(最后一个字符)之外的所有内容。