Гиперссылки в Word для переходов


Смелый Хвост
3  2  1  Герой легенд

Перевожу в рамках конкурса про Нарнию, возник вопрос:
формат PDF я распознал и конвертировал в MS Word, в нём и работаю. Чтобы бегать по параграфам, хочу сделать ссылки из номеров. Пока что сделал "закладками" – пицот закладок и пицот (больше вдвое-втрое, на самом деле) ссылок на них. Есть как вариант сделать "оглавлением".
Вопросы такие: кто-нибудь что-то подобное делал? как удобнее всего оформлять ссылки? Может, еще есть более удобный третий способ? Может, надо не в ворде, а в чём-то еще работать (чтобы потом было удобнее портировать и пр.)?
Jumangee – может, это обсуждение уже отделить в отдельную "техническую" ветку?


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
Jumangee
Во всех бочках затычка

Действительно – вопрос не имел никакого отношения к Plansescape Smile
Насколько мне известно, в ворде можно сделать гиперссылку на "#p1", а потом в нужном месте "Вставка"-"Закладка", пишешь "p1". Всё. Единственное, ворд не даёт вставить закладку начинающуюся с цифры, но это можно пережить.

Смелый Хвост
3  2  1  Герой легенд
Jumangee
ворд не даёт вставить закладку начинающуюся с цифры

это я уже понял Sad
а потом это в html или еще куда перекинуть – просто? закладки станут гиперссылками?

Jumangee
Во всех бочках затычка
Piligrim
2  Меценат

Я перевожу тоже в ворде. Сделал шаблон. Для номера параграфа свой стиль, для перехода свой. В процессе написания макрос для авторасставления переходов.


_________________
Все движется... Иногда даже вперед!
Jumangee
Во всех бочках затычка

Да, так по-идее лучше – потом, при желании, при смене оформления номера параграфа и/или переходов не придётся выискивать их по книге

Смелый Хвост
3  2  1  Герой легенд

Piligrim, у меня макросом ставится закладка. А как остальное? Пришли файл?


_________________
Эти морские зайцы, эти дохлые медузы отказываются следовать за своим капитаном!
danner
2  Свободный искатель

Гиперссылки могут указывать не только на закладки, но и на заголовки. Делаешь номер параграфа стилем "Заголовок 1", например, и вперед, гиперссылки на них.
Весь свой фаллаут я сделал именно так, если совсем интересно смотри мой doc файл, в нем закладок нет.

Ссылка для ленивых

Liam
Путник

Я для этой цели накатал два этих макроса. Единственное что нужно сделать, это в зависимости от книги менять запрос в строке поиска
Первый макрос расставляет закладки, второй ставит на них гипрессылки

Sub AddMark()

‘ Ìàêðîñ1 Ìàêðîñ
‘ Ìàêðîñ çàïèñàí 2012/01/21 Admin
‘ nn = 200

‘While Selection.Find.Execute = True ‘i = 0 ‘While Selection.Text <Selection> 0 ActiveDocument.Hyperlinks(1).Delete Wend Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll For i = nn To 0 Step -1 ‘Ïîèñê ñòðàíö SS2 = Trim(i) SS1 = "^m" + SS2 + "^p" Selection.Find.ClearFormatting With Selection.Find .Text = SS1 .Replacement.Text = "" .Forward = False .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With ‘Ðàññòàíîâêà çàêëàäîê If Selection.Find.Execute Then Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = SS2 .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute With ActiveDocument.Bookmarks .Add Range:=Selection.Range, Name:="m" + Trim(i) .DefaultSorting = wdSortByName .ShowHidden = False End With End If Next i End Sub

Sub SetLink()

‘ Ìàêðîñ1 Ìàêðîñ
‘ Ìàêðîñ çàïèñàí 2012/01/21 Admin
‘ nn = 200

‘While Selection.Find.Execute = True ‘i = 0 ‘While Selection.Text <> "}" ‘ Selection.MoveRight Unit:=wdCharacter, Count:=1 ‘ i = i + 1 ‘Wend For i = nn To 0 Step -1 ‘Ïîèñê ñòðàíö SS2 = Trim(i) SS1 = "òêðîé ñòðàíèö? " + SS2 + "[!][0-9]" work = True While work = True Selection.Find.ClearFormatting With Selection.Find .Text = SS1 .Replacement.Text = "" .Forward = False .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With ‘Ðàññòàíîâêà çàêëàäîê If Selection.Find.Execute Then Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = SS2 .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _ SubAddress:="m" + SS2, ScreenTip:="", TextToDisplay:="@" + Selection.Text Selection.HomeKey Unit:=wdLine Else work = False End If Wend Next i Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "@" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub
Jumangee
Во всех бочках затычка

Если честно, не совсем понял что делают макросы. Не поясните?
Плюс, "возьмите" код в тэг [code]

Liam
Путник

Sub SetMarks&#40;&#41; ' ' Макрос расставлет закладки в параграфах ' &nbsp; &nbsp; 'Изменяемая переменная. Определяет кол-во параграфов &nbsp; &nbsp; nn = 200 &nbsp; &nbsp; &nbsp; &nbsp; 'While Selection.Find.Execute = True &nbsp; &nbsp; &nbsp;'i = 0 &nbsp; &nbsp; &nbsp;'While Selection.Text <> "&#125;" &nbsp; &nbsp; &nbsp; '&nbsp; &nbsp;Selection.MoveRight Unit&#58;=wdCharacter, Count&#58;=1 &nbsp; &nbsp; &nbsp; &nbsp;'&nbsp; i = i + 1 &nbsp; &nbsp; &nbsp;'Wend &nbsp;' Очитска текста от всех закладок и гиперссылок&nbsp; &nbsp; Dim oBkm As Bookmark For Each oBkm In ActiveDocument.Range.Bookmarks oBkm.Delete Next While ActiveDocument.Hyperlinks.Count > 0 &nbsp;ActiveDocument.Hyperlinks&#40;1&#41;.Delete &nbsp;Wend &nbsp;Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False &nbsp; &nbsp; &nbsp; &nbsp; 'Эту часть можно удалить. Она заменяет двойные пробелы на одиночные &nbsp; &nbsp; Selection.Find.ClearFormatting &nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting &nbsp; &nbsp; With Selection.Find &nbsp; &nbsp; &nbsp; &nbsp; .Text = "&nbsp; " &nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = " " &nbsp; &nbsp; &nbsp; &nbsp; .Forward = True &nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue &nbsp; &nbsp; &nbsp; &nbsp; .Format = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False &nbsp; &nbsp; End With &nbsp; &nbsp; Selection.Find.Execute Replace&#58;=wdReplaceAll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'Расстановка закладок. &nbsp; &nbsp; 'Идёт от конца к началу &nbsp; &nbsp; &nbsp;For i = nn To 0 Step -1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'Формируем номер закладки &nbsp; &nbsp; SS2 = Trim&#40;i&#41; 'Это основная строка. В ней задётся поиск параграфа 'В данном случае номер следует за началом новой страницы 'и заканчивается знаком абзаца 'В зависимости от книги эту строку надо менять &nbsp; &nbsp; &nbsp; &nbsp;SS1 = "^m" + SS2 + "^p" &nbsp; &nbsp; &nbsp; &nbsp; Selection.Find.ClearFormatting &nbsp; &nbsp; With Selection.Find &nbsp; &nbsp; &nbsp; &nbsp; .Text = SS1 &nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = "" &nbsp; &nbsp; &nbsp; &nbsp; .Forward = False &nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue &nbsp; &nbsp; &nbsp; &nbsp; .Format = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False &nbsp; &nbsp; End With &nbsp; &nbsp; 'Это выделение непосредственно самого номера параграфа. &nbsp; &nbsp; 'Если этого не сделать, служебные знаки &nbsp; &nbsp; 'могут привести к порче текста &nbsp; &nbsp; If Selection.Find.Execute Then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Selection.Find.ClearFormatting &nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting &nbsp; &nbsp; With Selection.Find &nbsp; &nbsp; &nbsp; &nbsp; .Text = SS2 &nbsp; &nbsp; &nbsp; &nbsp; .Replacement.Text = "" &nbsp; &nbsp; &nbsp; &nbsp; .Forward = True &nbsp; &nbsp; &nbsp; &nbsp; .Wrap = wdFindContinue &nbsp; &nbsp; &nbsp; &nbsp; .Format = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchCase = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWholeWord = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchByte = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchAllWordForms = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchSoundsLike = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchWildcards = False &nbsp; &nbsp; &nbsp; &nbsp; .MatchFuzzy = False &nbsp; &nbsp; End With &nbsp; &nbsp; Selection.Find.Execute &nbsp; &nbsp; &nbsp;'А это устанавливается сама закладка&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;With ActiveDocument.Bookmarks &nbsp; &nbsp; &nbsp; &nbsp; .Add Range&#58;=Selection.Range, Name&#58;="m" + Trim&#40;i&#41; &nbsp; &nbsp; &nbsp; &nbsp; .DefaultSorting = wdSortByName &nbsp; &nbsp; &nbsp; &nbsp; .ShowHidden = False &nbsp; &nbsp; &nbsp;End With &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If &nbsp; &nbsp; Next i &nbsp; End Sub

Вообще можно добавить сообщение если какой-то параграф не будет найден. что иногда бывает, по той причине, что в тексте есть мусор, котрый не был обнаружен.

Добавил через 21 минут 57 секунд:

Этот макрос ставит гиперссылки на параграфы


Sub SetLincs()

‘как в первом макросе
    nn = 200
   
   
   
   
    For i = nn To 0 Step -1
       
   
    SS2 = Trim(i)
    SS1 = “крой страниц? “ + SS2 + “[!][0-9]”
    work = True
   
‘Этот цикл устанавливет все найденные гипрессылки на данный параграф.

   While work = True
   
    Selection.Find.ClearFormatting
     With Selection.Find
        .Text = SS1
        .Replacement.Text = “”
        .Forward = False
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = True
    End With
   
   
   
    ‘
   
    If Selection.Find.Execute Then
             
      Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = SS2
        .Replacement.Text = “”
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    Selection.Find.Execute
             
             
     ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:=”“, _
     SubAddress:=“m” + SS2, ScreenTip:=”“, TextToDisplay:=”@” + Selection.Text
     Selection.HomeKey Unit:=wdLine
    Else
    work = False
    End If
   
 
   Wend
     Next i
 
  ‘Для того, чтобы уже найденные гиперссылки не мешали поиску,
  ‘в них ставился знак . Сейчас все гиперссылки расставлены &nbsp; 'и этот знак удаляется. &nbsp; Selection.Find.ClearFormatting &nbsp; &nbsp; Selection.Find.Replacement.ClearFormatting &nbsp; &nbsp; With Selection.Find &nbsp; &nbsp; &nbsp; &nbsp; .Text = "
        .Replacement.Text = “”
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 
  End Sub

Разделы форума