C#互操作:如何确定字段的范围?

3
我希望能够遍历文档中的所有字段,并在类型为wdFieldIndexEntry的字段后面放置文本,但是字段没有类似于书签的范围值。
以下是我尝试的最接近的方法:
foreach( Field f in document.Fields)
{
    if( f.Type == WdFieldType.wdFieldIndexEntry)
    {
        // f.Range.InsertAfter("{{Some After text}}"); // <- no Range field
        f.Code.InsertAfter("{{Some After text}}");  // puts text inside field
    }
}

如上所述,将文本放入代码中(毫不意外)。我该如何获取字段位置/范围,以便在字段之前或之后插入文本?

1个回答

5
实际上,字段确实会返回Range对象。大多数字段类型可以返回两种范围:一个用于Field.Code,另一个用于Field.Result
索引字段很特殊,它仅返回Field.Code。这是字段{括号}内的文本。因此,返回此Range不会将焦点放在字段外,但您可以到达那里...
首先,“折叠”范围到其端点(类似于按向右箭头进行选择)。然后将范围的起始点向文档结尾移动一个字符-现在它在字段外。
Word.Range rngField = null;
object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
object oMoveCharacter = Word.WdUnits.wdCharacter;
object oOne = 1;
foreach( Field f in document.Fields)
{
    if( f.Type == WdFieldType.wdFieldIndexEntry)
    {
        rngField = f.Code;
        rngField.Collapse(ref oCollapseEnd);
        rngField.MoveStart(ref oMoveCharacter, ref oOne);
        rngField.InsertAfter("{{Some After text}}");         }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接