Word использует REF
поля для перекрестных ссылок, поэтому, чтобы получить перекрестные ссылки для абзаца, код должен выглядеть примерно так
Word.Range rng = null;
foreach (para In doc.Paragraphs)
{
rng = para.Range;
foreach (fld In rng.Fields)
{
if (fld.Type = Word.WdFieldType.wdFieldRef)
{
Debug.Print("Code: " + fld.Code.Text + "; Result: " + fld.Result.Text);
}
}
}
Сложная часть здесь заключается в том, что REFполе на самом деле относится.Когда перекрестная ссылка вставляется во что-либо, кроме Bookmark
Word, автоматически назначается закладка для этого диапазона в документе.Названия закладок начинаются с символа подчеркивания _
, за которым следует Ref
и число.По умолчанию они скрыты на странице и в диалоговом окне «Закладки».Типичный код поля REF: REF _Ref1571107
Таким образом, нет никакого способа, кроме только кода поля, определить, какая это перекрестная ссылка.В зависимости от того, какой параметр был выбран при вставке перекрестной ссылки на рисунок, может получить ее из Result
.Например, если перекрестная ссылка отображает весь заголовок или «только метку и номер», то она будет содержать строку Figure
, которая является довольно простой.
Если ни один из этих случаев не подходит, и был выбран один из трех других вариантов, можно извлечь имя закладки из кода поля, найти закладку в тексте документа и извлечь информацию из этого диапазона- как именно это будет зависеть от отдельного документа и от того, как ссылались на цифры.
В данный момент у меня не запущена среда C #, но есть базовый VB-код для поиска имени закладки изREF
поле:
sBkmName = Mid(fld.code, InStr(fld.code, "_Ref"), 11) 'a bookmark name is 11 characters long
Debug.Print ActiveDocument.Bookmarks(sBkmName).Range.Text