but*_*oys 3 c# ms-word office-interop
我想遍历文档中的所有字段并将文本放在 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
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,上面将文本放入代码中(不足为奇)。如何获取字段位置/范围以便在字段之前或之后插入文本?
实际上,字段确实返回Range对象。大多数字段类型可以返回两种范围:一种是 for Field.Code,另一种是 for Field.Result。
Index 字段的特殊之处在于它只返回Field.Code。这是字段{括号}中的文本。所以返回这个Range不会把焦点放在领域之外,但你可以到达那里......
首先将范围“折叠”到其终点(将其想象为按向右箭头进行选择)。然后将 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}}"); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |