簡體   English   中英

C#互操作:如何確定字段的范圍?

[英]C# interop: How to determine a range of a Field?

我想遍歷文檔中的所有字段,並將文本放在wdFieldIndexEntry類型的字段之后,但是字段沒有“書簽”所能實現的Range值。

以下是我最近來過的:

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
    }
}

如前所述,上面將文本放入代碼中(毫不奇怪)。 如何獲取字段位置/范圍,以便可以在字段之前或之后插入文本?

實際上,字段確實返回Range對象。 大多數字段類型可以返回兩種范圍:一種用於Field.Code ,另一種用於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}}");         }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM