在特定的单词页面上插入文本框

时间:2017-03-24 16:16:01

标签: c# ms-word vsto

我正在遍历word文档中的所有故事范围,以找到不符合公司标准的形状。当我找到这样的形状时,我想在它的页面右上角添加一个文本框。到目前为止,我只设法将它添加到第一页。

foreach (Word.InlineShape shape in storyRange.InlineShapes)
        {
            if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
            {
                if (shape.Width != CurrentWordApp.CentimetersToPoints(Constants.LogoWidth))
                {
                    anchor = shape.Range;
                    shapePageNumber = (int)shape.Range.Information[Word.WdInformation.wdActiveEndPageNumber];
                    AddMarkerToPage(shapePageNumber, anchor);
                }
            }
        }     

这是AddMarkerToPage方法的摘录。我发现添加文本框的唯一地方是标题。我找到标题的唯一地方是通过section对象。但部分不等于页面。

 Word.HeaderFooter header =  anchor.Sections.First.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
 if (!pageHasMarker)
        {
            Word.Shape tbx = header.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromLeft),
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromTop),
                        CurrentWordApp.CentimetersToPoints(Helper.errorMarkerWidth),
                         CurrentWordApp.CentimetersToPoints(Helper.errorMarkerHeight), pageRange);
            tbx.Name = "errorBox";
            tbx.TextFrame.TextRange.Text = Resources.Strings.txtDesignCheckHeaderLogo;
        }
 }

如何找到形状所在页面上的标题,或者让另一个对象允许我将文本框放在特定页面上(我可以从形状对象中获取该数字)

1 个答案:

答案 0 :(得分:1)

请勿使用标题,请使用Document.Shapes集合。

Word.Shape tbx = <document>.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromLeft),
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerFromTop),
                 CurrentWordApp.CentimetersToPoints(Helper.errorMarkerWidth),
                  CurrentWordApp.CentimetersToPoints(Helper.errorMarkerHeight), anchor);
tbx.Name = "errorBox";
tbx.TextFrame.TextRange.Text = Resources.Strings.txtDesignCheckHeaderLogo;

我想你也需要这些:

tbx.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage;
tbx.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionColumn;