Word Interop复制表格单元格式化的文本

时间:2013-01-22 14:48:06

标签: c# ms-word ms-office add-in office-interop

我正在编写一个单词addin来自动编辑协议模板。

在模板中是一个表格,我想提取/复制此表格中单元格的格式化文本。

现在我这样做:

Range formattedText = agendaTable.Rows[i].Cells[1].Range;
string temp = formattedText.WordOpenXML;

稍后我想将文本粘贴到另一个表格单元格中:

otherTablesRow.Cells[1].Range.InsertXML(temp);

格式化是正确的,除了最后的换行符(“\ r \ n”),它来自我从单元格中提取文本的范围。似乎word使用linebreak来标记单元格结束。

因此,在将文本插入其他表格单元格后,我有两个换行符。我怎样才能避免重复的换行? 有人知道检索单元格内容的替代方法吗?


更新:我可以用另一种方式提问我。

我的整体问题是将多个格式化的文本范围复制到内存中,然后将其粘贴到同一文档中的某个位置。

2 个答案:

答案 0 :(得分:4)

您可以通过以下方式复制和粘贴选择:

public void Copy()
{
    var selection = (Range)Application.Selection;
    selection.Copy();
}

public void Paste()
{
    var selection = (Range)Application.Selection;
    selection.PasteSpecial();
}

第一个选择是从哪里复制,第二个是复制的位置。

编辑:在不使用剪贴板的情况下复制带格式的文本(它是简单的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]);
    }              
}

答案 1 :(得分:4)

尝试以下代码,它将文本和格式从一个单元格复制到另一个单元格:

var copyFrom = agendaTable.Rows[i].Cells[1].Range;
var copyTo = otherTablesRow.Cells[1].Range;

copyFrom.MoveEnd(WdUnits.wdCharacter, -1);
copyTo.FormattedText = copyFrom.FormattedText;

在agendaTable范围内有一个单元格字符结尾,会混淆示例中的目标单元格;使用 MoveEnd ,我们复制除了单元格字符末尾(最后一个字符)之外的所有内容。