我首先尝试使用 Word.Selection,但我想不出一种方法可以一次取一行并复制粘贴它。使用 Word.Selection 可能是可行的。
我想到的下一件事是一次复制粘贴一个单元格,但 Range 属性保留了表格单元格结构。我查看了 Word 模型并试图找出每行之后是否有某种终止字符以将其区分为行尾。有这样一个字符,但它适用于所有细胞。要找到这个字符,请单击办公室按钮(除了主页),单击单词选项,单击显示,在部分中始终在屏幕上显示这些格式标记,勾选显示所有格式标记。这将显示 Word 文档中的所有不可打印字符。这是您可以看到的符号 ¤。
该符号保存单元格的结构信息,暴露的 ANSI 字符为 13 + 7。13 是段落标记,7 是“单元格结束”标记。这包含指向文件中单元结构管理的更多信息。在 Word 2007 中,这两个字符显示为一个字符,因此我们需要做的是从单元格的 Range 中删除这个字符。
我创建了一个列表来保存我需要的主表中的所有单元格。
List<Microsoft.Office.Interop.Word.Cell> masterTableCells=new List<Microsoft.Office.Interop.Word.Cell>();
之后,以下代码从 Range 中删除最后一个字符
Microsoft.Office.Interop.Word.Table table = b.Range.Tables[1];
table.ID = b.Name;
for (int colCounter = 1; colCounter <= masterTable.Columns.Count; colCounter++)
{
Microsoft.Office.Interop.Word.Range sourceRange = masterTable.Cell(1, colCounter).Range;
Microsoft.Office.Interop.Word.Range targetRange = table.Cell(1, colCounter).Range;
object oCharacter = Microsoft.Office.Interop.Word.WdUnits.wdCharacter;
object negOne = -1;
sourceRange.MoveEnd(oCharacter, negOne);
targetRange.MoveEnd(oCharacter, negOne);
targetRange.FormattedText = sourceRange.FormattedText;
}
目的是获取格式化文本,并通过从每个单元格 Range 中删除字符,我们能够仅指向该特定单元格的结构,而不是整个表格。
如果您尝试仅使用格式化文本属性运行循环,您将收到表损坏错误。希望这可以帮助。