使用C#删除文档列中Word表上方的段落

时间:2019-07-13 16:00:14

标签: c# ms-word office-interop word-automation word-interop

我处理的是三栏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);

enter image description here

3 个答案:

答案 0 :(得分:2)

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

因此,您需要在所有列顶部 all 表之前的段落。这段文字的格式可能非常小,并且没有“前空格”或“后空格”-我会为其创建特殊样式。

按此顺序工作很重要:

  1. 插入前导段落标记,其格式为 Normal 样式。
  2. 插入其下面的表格(当以普通样式创建表格时表格格式最可靠地工作)
  3. 对上一段应用样式使其变小

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

答案 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)

在上述问题中,Word中似乎存在一个 bug (已通过版本2013测试) Word2013

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

enter image description here

第1列和第2列是1个表格,分布在页面上的这2列中。在第三列中,将启动一个新表。换句话说,似乎不可能对齐所有表格的顶部位置。