7

在我的 Word 加载项中,我有一个 WordDocument对象,其中包含一个特定的Section. 在此Section,我附加一个Shape

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;

我的问题是某些 Word 文档模板的图像或其他内容出现在我的形状上方。最初,我认为设置 Z 顺序足以解决此问题:

shape.ZOrder(MsoZOrderCmd.msoBringToFront);

它没。所以我的问题是,我怎样才能绝对设置 my 的 Z 顺序Shape,或者换句话说,我还需要设置什么才能使 myShape成为您在文档中看到的最重要的内容(意思是,它出现在所有其他事物之上)?

4

2 回答 2

8

我终于弄清楚了为什么这些方法不起作用:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

问题是我Shape在一个部分中添加了我的对象HeaderFooter,但是显示在它上面的形状是在Document. Z 排序仅与对象所在的同一部分中的其他形状相关(无论您的对象是否在实际文档中、页眉、页脚等中)。

因此,不要使用此代码将形状添加到特定部分:

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

我使用此代码直接将其添加到我的文档中,然后对其应用 Z 排序,它确实有效。它出现在我模板中的所有其他对象之上:

var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

编写 Word 宏,第二版非常清楚地说明了这一点:

ZOrder 方法设置 Shape 对象相对于其他对象的 z 顺序。请注意,该方法不设置绝对 z 顺序。

因此,绝对 Z 顺序取决于其他因素,例如Shape在这种情况下实际驻留的位置。

于 2016-10-05T18:59:18.387 回答
4

在 Word 中手动执行此操作,我选择了“在文本前面显示”选项。你应该试试:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

如果由于其他对象而仅此一项不起作用,请尝试一个接一个地使用:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);

这样做的原因是 MS Word 似乎将 Text 和其他对象视为具有不同的 Z-Orders。

于 2016-10-04T20:40:32.413 回答