我正在使用以下代码复制并粘贴表格:
Word.Table tableTemplate = document.Tables[tableNumber];
tableTemplate.Select();
word.Selection.Copy(); //word is my Word.Application
word.Selection.MoveDown(Word.WdUnits.wdLine, 2);
word.Selection.PasteAndFormat(Word.WdRecoveryType.wdTableOriginalFormatting);
table = document.Tables[tableNumber + 1];
不幸的是,当粘贴表时,document.Tables.Count变量不会递增,而最后一行会抛出索引超出边界的错误。我确定这是我失踪的小事。
答案 0 :(得分:1)
如果遇到类似问题的人正在寻找解决方案,我会在桌子下方放置一个书签,将选择光标移动到那里,然后在书签之前选择范围并粘贴。
Word.Bookmark bkmrk = document.Bookmarks["MyBkmrk"];
Word.Range rng = document.Range(bkmrk.Range.Start - 1, bkmrk.Range.Start - 1);
rng.Select();
word.Selection.Paste();
这似乎比尝试使用MoveDown要好得多。我甚至尝试在选择中使用MoveDown,使用范围中的段落数来确定距离,并且完全没有效果。
编辑:
所以,我真正的问题是我需要复制一个表并在循环中粘贴一些表,然后编辑表的内容。我不停地跑进桌子里,一般都搞砸了。对于需要做类似事情的人来说,这里有一些帮助:
Word.Table table = document.Tables[tableNumber];
table.Select();
wordApplication.Selection.Copy();
for(int i = 0; i < tablesINeed; i++)
{
Word.Range rng = document.Range(document.Tables[tableNumber + i].Range.End + 1, document.Tables[tableNumber + i].Range.End + 1);
rng.Select();
wordApplication.Selection.Paste();
// Modify table accordingly
}
看起来很简单,但需要经过大量的反复试验。希望它会帮助别人。
答案 1 :(得分:0)
我有一个基于cboler的答案。如果桌子后面已经有东西要复制,我会遇到问题。
private static List<Table> CloneTables(Application Application, Document doc, int tableNumber, int tablesINeed)
{
List<Table> sameTables = new List<Table>();
Table lastTable = doc.Tables[tableNumber];
sameTables.Add(lastTable);
lastTable.Select();
Application.Selection.Copy();
for (int i = 0; i < tablesINeed; i++)
{
lastTable.Range.Next().InsertParagraphAfter();
Range rng = doc.Range(doc.Tables[tableNumber + i].Range.End + 1, doc.Tables[tableNumber + i].Range.End + 1);
rng.Select();
Application.Selection.Paste();
lastTable = doc.Tables[tableNumber + i + 1];
sameTables.Add(lastTable);
}
return sameTables;
}