C# 互操作:如何确定字段的范围?
C# interop: How to determine a range of a Field?
我想遍历文档中的所有字段并将文本放在 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
}
}
如上所述,上面将文本放入代码中(不足为奇)。如何获取字段 location/Range 以便我可以在字段之前或之后插入文本?
实际上,字段 做 return Range
个对象。大多数字段类型可以 return 两种范围:一种用于 Field.Code
,另一种用于 Field.Result
.
索引字段的特殊之处在于它 return 只有 Field.Code
。这是字段 { brackets } 中的文本。所以 return 进行此 Range
不会将焦点放在字段之外,但您可以到达那里...
首先 "collapse" 范围到它的终点(把它想象成按向右箭头进行选择)。然后将范围的起点向文档末尾移动一个字符 - 现在它在字段之外。
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}}"); }
}
我想遍历文档中的所有字段并将文本放在 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
}
}
如上所述,上面将文本放入代码中(不足为奇)。如何获取字段 location/Range 以便我可以在字段之前或之后插入文本?
实际上,字段 做 return Range
个对象。大多数字段类型可以 return 两种范围:一种用于 Field.Code
,另一种用于 Field.Result
.
索引字段的特殊之处在于它 return 只有 Field.Code
。这是字段 { brackets } 中的文本。所以 return 进行此 Range
不会将焦点放在字段之外,但您可以到达那里...
首先 "collapse" 范围到它的终点(把它想象成按向右箭头进行选择)。然后将范围的起点向文档末尾移动一个字符 - 现在它在字段之外。
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}}"); }
}