我处理的是三栏Word文档。我想在顶部的文档栏 flush 中插入新表。不幸的是,我不可能插入没有段落的内容。我将此表插入 break 列之后(请参见代码)。如果我用许多段落替换分栏符,则可以将表格放在顶部。不幸的是,这种方法不实用,并且不容易以编程方式实现。
Word.Paragraph oPara4;
var oRng = document.Bookmarks.get_Item(@"\EndOfDoc").Range;
oPara4 = document.Content.Paragraphs.Add(oRng);
Word.Range rngPara = oPara4.Range;
rngPara.InsertParagraphBefore();
rngPara.Text = "Some Text Before the break";
oPara4.Format.SpaceAfter = 24;
rngPara.InsertParagraphAfter();
rngPara.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
// Column Break
rngPara.InsertBreak(Word.WdBreakType.wdColumnBreak);
rngPara.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
// Create new table in new column (after column break)
oRng = document.Bookmarks.get_Item(@"\EndOfDoc").Range;
Word.Table tableCopy = document.Tables.Add(oRng, 1,1, ref oMissing, ref oMissing);
答案 0 :(得分:2)
您看到的原因是Word 需要表格之间的段落。该段存储有关表在页面上位置的重要信息(可以在Word Open XML中看到)。两个紧邻的表(它们之间没有段落)将自动合并。正如本讨论中其他地方所建议的那样,这是 不是 错误。
因此,您需要在所有列顶部 all 表之前的段落。这段文字的格式可能非常小,并且没有“前空格”或“后空格”-我会为其创建特殊样式。
按此顺序工作很重要:
这是我回答上一个问题时建议在页面上使用多列表格而不是使用报纸栏的原因之一。
答案 1 :(得分:1)
找到一个解决方案:我将新表移到它完全到达新列为止。 不是很漂亮,但是可以(原型):
// Add paragraph before table
var rangeBeforeTable = document.Bookmarks.get_Item(@"\EndOfDoc").Range;
rangeBeforeTable.InsertParagraphAfter();
// Add table
var newTableRange = document.Bookmarks.get_Item(@"\EndOfDoc").Range;
document.Content.Paragraphs.Add(newTableRange);
var newTable = document.Tables.Add(newTableRange, 1, 1, ref oMissing, ref oMissing);
newTable.Range.Paste();
// Save coordinates
int leftOriginal, topOriginal, widthOriginal, heightOriginal;
int left, top, width, height;
// Get coordinates from newly created table
word.ActiveWindow.GetPoint(out leftOriginal, out topOriginal, out widthOriginal, out heightOriginal, newTableRange);
while (true)
{
// Get coordinates from moving table
word.ActiveWindow.GetPoint(out left, out top, out width, out height, newTableRange);
if (top < topOriginal)
break;
// Add paragraph before new table and move table down
document.Content.Paragraphs.Add(newTableRange.Previous());
}
答案 2 :(得分:-1)