Jak sprawić, by hiperłącza wyświetlały się poprawnie w MS Word dla plików utworzonych w innych edytorach tekstu?

0

W mojej pracy często wysyłane są artykuły utworzone w różnych edytorach tekstu, które otwieram i edytuję w programie Word 2013. Jednak pod względem kompatybilności, oczywiście nie grają one zbyt dobrze razem.

Nie wymaga to intensywnego formatowania, ale mam poważne, ciągłe problemy z wyświetlaniem hiperłączy w tych artykułach.

  1. Jedna osoba pisze w Pages (Mac) i zapisuje jako .docx. Hiperłącza w jej plikach są zawsze podkreślone, ale nigdy nie są niebieskie, jak to się dzieje w programie Word: są czarne. Zauważyłem również, że jeśli mam dodać link do utworzonego przez nią pliku, pojawia się on w czarnym podkreślonym tekście, a nie w niebieskim podkreśleniu, jak w moich innych plikach.

  2. Inna osoba wysyła pliki jako .rtf - nie jestem pewien, jaki program, ale na komputerze Mac. Hiperłącza w jego plikach w ogóle nie mają innego formatowania niż reszta tekstu. Dopiero po najechaniu myszką w programie Word widać, że jest tam link. Podczas przeglądania w moim programie Word 2013 hiperłącza i zwykły tekst są identyczne. Co ciekawe, w podglądzie Gmaila łącza w tych plikach wyglądają dobrze (niebieskie, podkreślone), więc wykorzystałem to jako obejście. Wspomniana osoba próbowała zamiast tego zapisać jako .docx, ale hiperłącza w ogóle nie przetrwały konwersji - nie ma ich nawet po najechaniu myszką na miejsce, w którym kiedyś była.

Czy istnieje sposób (zamiast tych dwóch), aby automatycznie zmieniać te pliki po otrzymaniu na te, w których hiperłącza pojawiają się normalnie, w innym kolorze i podkreślone?

Przypadek nr 1 jest do zniesienia, ale już od dłuższego czasu był to problem.

Przykładowy plik przypadku 2 (zawiera tylko jedno hiperłącze): http://s000.tinyupload.com/index.php?file_id=45065577867642123191

surfmadpig
źródło
Czy mógłbyś zamieścić mały przykład przypadku nr 2?
harrymc
Na szczęście, ale nie jestem pewien, co tu pokazać - jeśli to nie są inne formalne hiperłącza, proszę przejść: postimg.org/image/rh7gm4k3f (wyskakujące okienko pojawia się po najechaniu kursorem myszy na Dalsze przygody w finansach i zbrodni, gdzie hiperłącze jest).
surfmadpig
Poprosiłem o przykładowy plik, który mógłbym studiować. Może dwa z nich: docx dla przypadku nr 1 i rtf dla przypadku nr 2. Nie ma sensu dawać dużych plików.
harrymc
@bibadia: Wydawało się, że to świetny pomysł, ale niestety nie działa. Próbowałem też bawić się z opcjami ... wciąż nic. To tak, jakby format niesformatowanych hiperłączy był częścią stylu osadzonego, ale Autoformat go nie zastępuje. Najpierw próbowałem przekonwertować na .docx, a następnie autoformatowanie i autoformatowanie bez konwersji. Brak szczęścia.
surfmadpig
@harrymc: Właśnie zredagowałem post z krótkim przykładem.
surfmadpig

Odpowiedzi:

1

Studiowałem przykładowy plik i myślę, że zrozumiałem źródło problemu: format RTF ma pola hiperłącza, ale nie ma stylu hiperłącza. Tylko bardziej rozwinięte formaty dokumentów mają ten styl: DOC, DOCX i DOCM.

Pola hiperłącza w dokumencie RTF są poprawnie zdefiniowane, ale w stylu Normalnym, a nie w stylu Hiperłącza. Niestety, Word nie może automatycznie rozwiązać tego problemu.

Rozwiązaniem, którego użyłem do poprawienia przykładowego pliku było:

  1. Zapisz plik RTF jako DOCM, aby miał styl hiperłącza
    (DOCM jest taki sam jak DOCX, tyle że dozwolone są makra)
  2. Uruchom makro VBA, które ustawia styl wszystkich pól hiperłącza na Hiperłącze

Użyte przeze mnie makro VBA jest wymienione poniżej:

Sub hyper()
For Each oHyperlink In ActiveDocument.Hyperlinks
    oHyperlink.Range.Style = ActiveDocument.Styles("Hyperlink")
Next oHyperlink
ActiveDocument.Range.Fields.Update
End Sub

Zaletą tego rozwiązania jest to, że przypisuje prawdziwy styl hiperłącza do wszystkich pól hiperłącza. Jest to lepsze niż wprowadzanie tylko kosmetycznych zmian, takich jak kolor czcionki i podkreślenie.

harrymc
źródło
Dzięki, to makro działało świetnie w przypadku nr 2, ale co ciekawe, wcale nie w przypadku nr 1 - dokumentów utworzonych w Pages. Ponadto - czy można to zmienić za pomocą poleceń, aby zmienić również domyślną czcionkę i rozmiar czcionki?
surfmadpig
Można zrobić wszystko oHyperlink.Range, co tylko chcesz, nie tylko ustawiając styl. Przypadek nr 1: możesz opublikować przykład, ale być może najpierw włącz wyświetlanie kodów pól, aby zobaczyć, jak / jeśli Pages utworzyły te pola.
harrymc
0

Jeśli wszystkie hiperłącza są w rzeczywistości hiperłączami (nie tylko tekstem), to

Nie przejmuj się, mój przyjacielu

Czeka Cię 10 łatwych kroków.

Spróbuj tego:

  1. Naciśnij Alt+F9dokument, w którym chcesz zobaczyć zmianę (spowoduje to przekształcenie i odsłonięcie wszystkich hiperłączy, bez obaw).
  2. Naciśnij, Ctrl+Haby otworzyć Find and Replace.
  3. Wpisz ^d hyperlinkw Findpolu.
  4. Przesuń kursor i zaznacz Replace withpole, ale nic nie pisz.
  5. Kliknij Moreprzycisk pod Replace withpolem.
  6. Kliknij Formatprzycisk poniżej innych opcji, które właśnie ujawniłeś.
  7. Kliknij na Style.
  8. Wybierz Hyperlinkz listy (naciśnij Hna klawiaturze, aby łatwiej ją znaleźć) i kliknij OK.
  9. Kliknij Replace Alli voila! to wszystko zrobione.
  10. Zamknij Find and Replaceokno i naciśnij Alt+F9.

WSKAZÓWKA: Jeśli nie chcesz tego robić za każdym razem dla każdego dokumentu, możesz utworzyć funkcję Makro i umieścić ją na Wstążce. Od tego momentu wystarczy jedno kliknięcie myszą.

Mam nadzieję, że to pomoże.

Seyyed Sajjad Moosavi
źródło
Dzięki Seyyed. To brzmi jak coś, co powinno działać, ale nie działa i myślę, że wiem dlaczego: W wyskakującym okienku „Znajdź styl” opis hiperłącza w „złym” dokumencie mówi „Kolor czcionki: hiperłącze”, gdy to samo pole w normalnym utworzonym przeze mnie dokumencie jest napisane „Kolor czcionki: niebieski”. Tak więc, jak podejrzewałem, jest to kwestia informacji o stylu zawartych w tych konkretnych plikach. Jakieś pomysły?
surfmadpig
0

Za duży na komentarz (co powinno być, ponieważ nie jest dobrze przetestowany i może nie robić tego, co chcesz).

Jeśli Autoformatowanie nie robi wystarczająco dużo (zgodnie z naszą rozmową w komentarzach), myślę, że będziesz musiał zrobić sporo do każdego hiperłącza, tj.

  • upewnij się, że został rozpoznany jako hiperlink przez program Word (w takim przypadku powinieneś zobaczyć kod pola {HYPERLINK}, jeśli używasz Alt-F9)
  • zastosuj styl znaku Hiperłącze do wyniku pola HYPERLINK
  • ponownie zastosuj formatowanie znaków do wyniku pola HYPERLINK, aby naprawić szkody, które może wyrządzić styl hiperłącza

Jeśli zaimportowany tekst zawiera wiele hiperłączy, wykonanie tego wszystkiego będzie prawdopodobnie dość nużące, dlatego następujący fragment VBA ma na celu naprawienie hiperłączy w treści aktualnie aktywnego dokumentu Word.

Wykryje tylko rzeczy, które Word uważa za hiperłącza (niekoniecznie wszystko, czego oczekujesz).

Sugerowałbym, aby w miarę możliwości najpierw otworzyć zaimportowane teksty jako osobne dokumenty, a następnie uruchomić ten kod. To powinno zminimalizować niepożądane skutki uboczne.

Cechą stylu znaków Hiperłącza jest to, że stosuje on „Domyślną czcionkę akapitu”, która może nie mieć takich samych właściwości (np. Rozmiar itp.) Jak istniejący tekst. Nawet jeśli zmodyfikujesz styl, aby użyć „Podstawowych właściwości”, może on zmienić rozmiar tekstu i tak dalej. Więc zrobiłem tutaj, aby spojrzeć na właściwości pierwszego znaku w „tekście wyświetlanym” hiperłącza i ponownie zastosować go do całego wyświetlanego tekstu po zastosowaniu stylu hiperłącza.

Ale jeśli stosujesz własne style akapitowe do importowanego tekstu, bardziej prawdopodobne jest, że tekst stylem Hiperłącze i tak zrobi, co chcesz, więc możesz być w stanie usunąć ten kawałek VBA.

Jeśli potrzebujesz szukać hiperłączy w innych „historiach” w dokumencie, takich jak pola tekstowe, nagłówki / stopki itp., Na pewno będziesz potrzebować więcej.

Private Type AutoFormatOptions
  bAutoFormatApplyBulletedLists As Boolean
  bAutoFormatApplyFirstIndents As Boolean
  bAutoFormatApplyHeadings As Boolean
  bAutoFormatApplyLists As Boolean
  bAutoFormatApplyOtherParas As Boolean
  bAutoFormatDeleteAutoSpaces As Boolean
  bAutoFormatMatchParentheses As Boolean
  bAutoFormatPlainTextWordMail As Boolean
  bAutoFormatPreserveStyles As Boolean
  bAutoFormatReplaceFarEastDashes As Boolean
  bAutoFormatReplaceFractions As Boolean
  bAutoFormatReplaceHyperlinks As Boolean
  bAutoFormatReplaceOrdinals As Boolean
  bAutoFormatReplacePlainTextEmphasis As Boolean
  bAutoFormatReplaceQuotes As Boolean
  bAutoFormatReplaceSymbols As Boolean
End Type
Sub fixUpHyperlinks()

Dim afo As AutoFormatOptions

Dim f As Word.Font

Dim h As Word.Hyperlink
' Save existing autoformat options

With Application.Options
  afo.bAutoFormatApplyBulletedLists = .AutoFormatApplyBulletedLists
  afo.bAutoFormatApplyFirstIndents = .AutoFormatApplyFirstIndents
  afo.bAutoFormatApplyHeadings = .AutoFormatApplyHeadings
  afo.bAutoFormatApplyLists = .AutoFormatApplyLists
  afo.bAutoFormatApplyOtherParas = .AutoFormatApplyOtherParas
  afo.bAutoFormatDeleteAutoSpaces = .AutoFormatDeleteAutoSpaces
  afo.bAutoFormatMatchParentheses = .AutoFormatMatchParentheses
  afo.bAutoFormatPlainTextWordMail = .AutoFormatPlainTextWordMail
  afo.bAutoFormatPreserveStyles = .AutoFormatPreserveStyles
  afo.bAutoFormatReplaceFarEastDashes = .AutoFormatReplaceFarEastDashes
  afo.bAutoFormatReplaceFractions = .AutoFormatReplaceFractions
  afo.bAutoFormatReplaceHyperlinks = .AutoFormatReplaceHyperlinks
  afo.bAutoFormatReplaceOrdinals = .AutoFormatReplaceOrdinals
  afo.bAutoFormatReplacePlainTextEmphasis = .AutoFormatReplacePlainTextEmphasis
  afo.bAutoFormatReplaceQuotes = .AutoFormatReplaceQuotes
  afo.bAutoFormatReplaceSymbols = .AutoFormatReplaceSymbols
End With
On Error GoTo cleanup

' set everything the way we want

With Application.Options
  ' all false
  .AutoFormatApplyBulletedLists = False
  .AutoFormatApplyFirstIndents = False
  .AutoFormatApplyHeadings = False
  .AutoFormatApplyLists = False
  .AutoFormatApplyOtherParas = False
  .AutoFormatDeleteAutoSpaces = False
  .AutoFormatMatchParentheses = False
  .AutoFormatPlainTextWordMail = False
  .AutoFormatPreserveStyles = False
  .AutoFormatReplaceFarEastDashes = False
  .AutoFormatReplaceFractions = False
  ' except this one
  .AutoFormatReplaceHyperlinks = True
  .AutoFormatReplaceOrdinals = False
  .AutoFormatReplacePlainTextEmphasis = False
  .AutoFormatReplaceQuotes = False
  .AutoFormatReplaceSymbols = False
End With

With ActiveDocument

  ' Apply the selected formats
  .Kind = wdDocumentNotSpecified
  .Content.AutoFormat

  ' Now apply the Hyperlink style to all Hyperlink field result ranges

  For Each h In .Hyperlinks
    With .Range.Fields(1).Result
      If .Characters.Count >= 1 Then
        ' Remove the following line if the Hyperlink style works for you
        Set f = .Characters(1).Font.Duplicate
        ' Apply the Hyperlink style
        .Style = ActiveDocument.Styles(wdStyleHyperlink).NameLocal
        ' Remove the following 2 lines if the Hyperlink style works for you
        Set .Font = f
        set f = Nothing
      End If
    End With
  Next

End With

cleanup:
' restore the original settings

With Application.Options
  .AutoFormatApplyBulletedLists = afo.bAutoFormatApplyBulletedLists
  .AutoFormatApplyFirstIndents = afo.bAutoFormatApplyFirstIndents
  .AutoFormatApplyHeadings = afo.bAutoFormatApplyHeadings
  .AutoFormatApplyLists = afo.bAutoFormatApplyLists
  .AutoFormatApplyOtherParas = afo.bAutoFormatApplyOtherParas
  .AutoFormatDeleteAutoSpaces = afo.bAutoFormatDeleteAutoSpaces
  .AutoFormatMatchParentheses = afo.bAutoFormatMatchParentheses
  .AutoFormatPlainTextWordMail = afo.bAutoFormatPlainTextWordMail
  .AutoFormatPreserveStyles = afo.bAutoFormatPreserveStyles
  .AutoFormatReplaceFarEastDashes = afo.bAutoFormatReplaceFarEastDashes
  .AutoFormatReplaceFractions = afo.bAutoFormatReplaceFractions
  .AutoFormatReplaceHyperlinks = afo.bAutoFormatReplaceHyperlinks
  .AutoFormatReplaceOrdinals = afo.bAutoFormatReplaceOrdinals
  .AutoFormatReplacePlainTextEmphasis = afo.bAutoFormatReplacePlainTextEmphasis
  .AutoFormatReplaceQuotes = afo.bAutoFormatReplaceQuotes
  .AutoFormatReplaceSymbols = afo.bAutoFormatReplaceSymbols
End With

'    Application.Options.AutoFormatApplyBulletedLists
'    Selection.Document.Kind = wdDocumentNotSpecified
'    Selection.Range.AutoFormat
End Sub

źródło