Word互操作复制表格单元格的格式化文本

本文关键字:格式化 文本 单元格 表格 互操作 复制 Word | 更新日期: 2023-09-27 17:55:02

我正在编写word插件,用于自动编辑协议模板。

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

现在我是这样做的:

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

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

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

格式是正确的,除了末尾的换行符("'r'a"),它来自我从单元格中提取文本的范围。似乎word使用换行符来标记单元格的结束。

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


更新:也许我用另一种方式问我的问题。

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

Word互操作复制表格单元格的格式化文本

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

var copyFrom = agendaTable.Rows[i].Cells[1].Range;
var copyTo = otherTablesRow.Cells[1].Range;
copyFrom.MoveEnd(WdUnits.wdCharacter, -1);
copyTo.FormattedText = copyFrom.FormattedText;

有一个结束单元格字符在可议程范围,搞砸了目标单元格在你的例子;使用MoveEnd,我们复制除单元格结束字符(最后一个字符)之外的所有内容。

你可以这样复制和粘贴选区:

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]);
    }              
}