我正在使用 Word 互操作来构建 Word 插件。在这个插件中,我有一个案例,我想检查文档中的所有 Field 对象,并且当该字段是对同一文档中另一个位置的交叉引用时,我需要能够捕获该字段所在段落中的文本指。
我能够获取字段对象的名称,但文档中没有定义书签,尽管在 Word 中我可以单击该字段以到达其他位置。
我试图通过在其上调用 DoClick() 来模拟用户单击该字段,然后我访问了 V_V_Scalar_Document_Generic.Application.Selection.Range.Text 但它什么也没给出。我也尝试了下面的 GoTo 方法,但仍然没有达到引用的文本。
System.Collections.Generic.List<string> L_V_List_String_Fields = new System.Collections.Generic.List<string>();
foreach (Field L_V_Scalar_Field_Item in V_V_Scalar_Document_Generic.Range.Fields)
{
try
{
if (L_V_Scalar_Field_Item.Type == WdFieldType.wdFieldRef)
// L_V_Scalar_Field_Item.Data --> gives COM exception
// L_V_Scalar_Field_Item.Code.ID --> blanks
// L_V_Scalar_Field_Item.DoClick() 'will not help because fields are not always hyperlinks
// L_V_Scalar_Field_Item.Result.Text --> gives the text of the field itself
// all variations I tried for the target parameter in the line below (last param) are not working
// V_V_Scalar_Document_Generic.[GoTo](Microsoft.Office.Interop.Word.WdGoToItem.wdGoToField, System.Type.Missing, System.Type.Missing, "_Ref28680085")
// Dim L_V_Scalar_String_Source as string = V_V_Scalar_Document_Generic.Application.Selection.Range.Text
L_V_List_String_Fields.Add($"CodeText:{L_V_Scalar_Field_Item.Code.Text} |FieldType:{L_V_Scalar_Field_Item.Type} |FieldKind:{L_V_Scalar_Field_Item.Kind} |SourceText:{"source text ??"}");
}
catch (Exception L_V_Scalar_Exception_Generic)
{
}
}