2016-09-28 3 views
7

내 Word 추가 기능에 특정 Section이 포함 된 Word Document 개체가 있습니다. 이 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); 

그렇지 않았습니다. 그래서 내 질문은, 내가 어떻게 내 Shape의 Z 순서를 설정할 수 있습니다, 또는 다른 말로, 내 Shape을 확인하기 위해 설정해야 할 다른 작업은 내가 볼 수있는 가장 중요한 일이 될 것입니다. 문서 (의미, 그것이 다른 모든 것보다 위에 나타남)?

답변

8

:

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

문제는 내가 HeaderFooter 섹션에 내 Shape 객체를 추가 한, 그러나 그것의 맨 위에 표시 한 모양 내에서 정의 된 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); 

Writing Word Macros, Second Edition 상태를 완벽하게 명확 :

의 ZOrder 방법은 다른 셰이프 객체의 z 순서를 설정 그것은 내 템플릿의 일부였던 다른 모든 객체 위에 등장 개체. 이 방법은 절대 z- 순서를 설정하지 않습니다.

따라서 절대 Z 오더는 Shape이 실제로있는 곳과 같은 다른 요인에 따라 달라집니다.

4

Word에서이 작업을 수동으로 수행 할 때 "텍스트 앞쪽으로 앞으로 가져 오기"옵션을 선택합니다. 당신은 시도해야합니다 :

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

을이 혼자 있기 때문에 다른 개체로 작동하지 않는 경우, 다른 후 하나를 사용하십시오 :

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

이 일을하는 이유는 MS 워드가 치료하는 것이다 텍스트 및 다른 객체가 다른 Z- 주문을 가진 것으로 간주합니다.

이러한 방법이 작동하지 않은 이유를 드디어 알아 냈
+0

시도해 보았지만 작동하지 않습니다. – Alexandru

+0

다음과 같은 정식 서적 에서조차이 것을 말할 것입니다. 작가는 ZOrder 메서드가 Shape 객체의 z 순서를 다른 객체에 상대적으로 설정하는 방법을 명시 적으로 기술합니다. 이 방법은 절대 z- 순서를 설정하지 않습니다. * : https://www.safaribooksonline.com/library/view/writing-word-macros/9781565927254/apbs02.html 답변이 작동하지 않으며 표준 응답. – Alexandru

+0

@Alexandru 아마도 Z-order가 여러 객체가 Z 순서의 일부가 아니더라도 무의미하기 때문에 링크가 실제로 사용자의 질문에 응답합니다. 귀하의 모양이 Z 순서 명령을받는 마지막 것이 아닌 한 interop에 내장 된 방법이없는 것으로 보입니다. 의심의 여지가 이것은 의도적으로 설계된 것입니다. 자신의 링크가 원하는 것과 다른 것을 보여주기 때문에 정식 답을 찾는 것이 좋습니다. – vbnet3d