Я использую Word Interop для создания плагина Word. В этом плагине у меня есть случай, когда я хочу проверить все объекты поля в документе, и когда это поле является перекрестной ссылкой на другое место в том же документе, мне нужно иметь возможность захватить текст в абзаце, в котором находится поле. ссылаясь на.
Мне удалось получить имя объекта поля, но в документе не было определенных закладок, хотя в Word я мог щелкнуть поле, чтобы перейти в другое место.
текст ссылки, который мне нужно получить
Объекты Bookmark не определены
Я попытался имитировать пользователя, щелкающего по полю, вызвав для него 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)
{
}
}