0

我在一个三栏 Word 文档中工作。我想在顶部齐平的文档列中插入一个新表格。不幸的是,我不可能在没有段落的情况下插入它。我在分栏符后插入此表(请参阅代码)。如果我用许多段落替换分栏符,我可以将表格放在顶部。不幸的是,这种方法不实用也不那么容易编程方式实现

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

在此处输入图像描述

4

3 回答 3

2

您看到的原因是 Word需要表格之间的段落。该段落存储有关表格在页面上的位置的重要信息(这可以在 Word Open XML 中看到)。两个直接相邻的表(它们之间没有段落)会自动合并。正如本讨论中其他地方所建议的,这不是一个错误。

因此,您需要在所有列顶部的所有表格之前放置一个段落。该段落可以使用非常小的字体大小进行格式化,并且没有“之前的空格”或“之后的空格”——我会为它创建一个特殊的样式。

按以下顺序工作很重要:

  1. 插入前导段落标记,格式为Normal样式。
  2. 在其下方插入表格(表格格式在从 Normal 样式创建表格时最可靠)
  3. 应用上一段的样式,使其更小

这是我在回答上一个问题时建议在页面上使用多列表而不是使用报纸专栏的原因之一......

于 2019-07-14T06:02:35.853 回答
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());
}
于 2019-07-15T11:24:23.550 回答
-1

在上述问题中,Word 中似乎存在错误(已使用 2013 版测试)Word2013

LibreOffice 中的相同文档(版本 6.2.4.2)

在此处输入图像描述

第 1 列和第 2 列是 1 个表格,分布在页面上的这 2 列中。在第三列中开始了一个新表。用文字来说,似乎不可能对齐所有表格的顶部位置。

于 2019-07-13T18:20:56.100 回答