Centrum skryptów - Microsoft office

Jak wyszukać i zmodyfikować sformatowany tekst w dokumencie programu Word?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak wyszukać i zmodyfikować sformatowany tekst w dokumencie programu Word?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak wyszukać sformatowany tekst w dokumencie programu Word, a następnie zastosować w nim tagi HTML?

-- ES

Cześć Skrypciarze! Odpowiedź

Cześć, ES. Zabawne, że to pytanie padło właśnie dzisiaj. Tak się składa, ze wczoraj wieczorem jadłem kolację ze swoim synem, podczas której odbyliśmy „rozmowę”. Ledwo zaczęliśmy jeść, kiedy Syn Skrypciarza wypalił: „Słuchaj tato, mam 17 lat i są pewne rzeczy o których powinienem wiedzieć, zanim stanę się dorosły.”

Chyba nie muszę wspominać, że takich słów boi się każdy ojciec na świecie. Ale obowiązek obowiązkiem jest, jak to mówią. „Dobrze Synu. Co chciałbyś wiedzieć?”

„To jest tak: muszę wiedzieć, jak wyszukać sformatowany tekst w dokumencie programu Word, a następnie zastosować w nim tagi HTML.”

Jak już wspominałem, rodzice (a przynajmniej ojcowie) nie lubią tego typu pytań ze strony swoich dzieci, zwłaszcza jeżeli dotyczą one wyjaśnień związanych ze skryptowaniem programu Microsoft Word, szczerze mówiąc to trochę krępujące – wyjaśniać własnym dzieciom takie rzeczy. Ale mniejsza z tym, bycie rodzicem to coś więcej niż tylko oglądanie, jak dzieci grają w piłkę (Szkoda, że nikt mi o tym nie powiedział, zanim zostałem ojcem.) Niezależnie od tego, jakie to było krępujące, usiadłem i cierpliwie wyjaśniłem mojemu synowi, jak wyszukać sformatowany tekst w dokumencie programu Word, a następnie zastosować w nim tagi HTML. I naprawdę starałem się jak najlepiej, żeby nie przybierać przy tym moralizatorskiego tonu, ograniczyłem się jedynie do uwagi, że skryptami wyszukiwania w programie Microsoft Word może zajmować się wyłącznie osoba prawdziwie kochająca skrypty administracji systemu. Zasadniczo zwykłe skryptowanie oraz rekreacyjne skryptowanie mogą być zabawne, ale bardzo często są przyczyną zawałów serca. Moja rada? Założyć rodzinę, a dopiero potem zabierać się za pisanie skryptu wyszukującego sformatowany tekst w dokumencie programu Word i stosującego tagi HTML.

Specjalnie dla tych, którzy jeszcze nie odbyli „rozmowy” ze swoimi dziećmi, przedstawiam skrypt, o którym opowiedziałem swojemu synowi:

Set objWord = CreateObject("Word.Application")

objWord.Visible = True



Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")

Set objSelection = objWord.Selection



objSelection.Find.Forward = True

objSelection.Find.Format = True

objSelection.Find.Font.Bold = True



Do While True

    objSelection.Find.Execute

    If objSelection.Find.Found Then

        objSelection.Text = "<b>" & objSelection.Text & "</b>"

    Else

        Exit Do

    End If

Loop

No dobra. Wyjaśnijmy to cudowne zjawisko, jakim jest wyszukiwanie tekstu w dokumencie programu Word. Jak widzimy, zaczynamy od utworzenia wystąpienia obiektu Word.Application i nadania właściwości Visible wartości True; to nam da działające wystąpienie programu Microsoft Word widoczne na ekranie. Po zastosowaniu metody Open w celu otwarcia pliku C:\Scripts\Test.doc, używamy poniższego wiersza kodu, aby utworzyć wystąpienie obiektu programu Word – Selection (które domyślnie ustawia kursor na początku dokumentu):

Set objSelection = objWord.Selection

I co, czy to już wszystko? Nie, nie całkiem, ale już niedaleko. Następnie określamy trzy kluczowe właściwości obiektu Find (obiektu podrzędnego względem obiektu Selection). W szczególności musimy:

  • Ustawić właściwość Forward na True. Dzięki temu skrypt będzie wiedział, że chcemy, aby wyszukiwanie przeszło przez cały dokument; z uwagi na fakt, iż zaczynamy wyszukiwanie na samym początku dokumentu (wiemy o tym, ponieważ tam właśnie znajduje się kursor) oznacza to, że na koniec wyszukiwanie obejmie cały dokument.
  • Ustawić właściwość Format na True. Dzięki temu skrypt będzie wiedział, że chcemy wyszukać formatowanie, a nie określoną wartość ciągu.
  • Ustawić właściwość Font.Bold na True. Dzięki temu skrypt będzie wiedział, że chcemy wyszukać tekst pisany pogrubioną czcionką.

Po skonfigurowaniu tych wartości właściwości, ustawiamy pętlę Do While, która powinna działać bez końca. A przynajmniej dopóki wartość True będzie miała wartość True. Dlatego też nie możemy powiedzieć, że ona będzie działać bez końca, sami widzicie, co się ostatnio dzieje w polityce i jest jedynie kwestią czasu, kiedy True nie będzie uważane za True. Ale to już temat na inną „rozmowę”.

Wewnątrz tej pętli wywołujemy metodę Execute, dzięki której skrypt będzie wiedział, że ma rozpocząć wyszukiwanie i kontynuować dopóki nie zdarzy się jedna z dwu rzeczy: albo znajdzie wystąpienie tekstu docelowego (czyli coś pisanego pogrubioną czcionką), albo dotrze do końca dokumentu.

Nie za szybko? Dobrze. Przypuśćmy, że znaleźliśmy tekst napisany pogrubioną czcionką. W takim przypadku właściwość Found obiektu Find będzie miała wartość True. To jest coś, co możemy sprawdzić za pomocą poniższego wiersza kodu:

If objSelection.Find.Found Then

Zakładając, że naprawdę znaleźliśmy tekst napisany pogrubioną czcionką, oznacza to, że musimy wstawić tag HTML <b> na początku tej wartości oraz tag </b> na końcu tej wartości. Do tego posłuży nam następujący wiersz kodu:

objSelection.Text = "<b>" & objSelection.Text & "</b>"

Jak widać, nie ma w tym nic nadzwyczajnego: technicznie rzecz biorąc, zastąpimy wartość właściwości Text obiektu Selection (czyli tekst napisany pogrubioną czcionką; podczas wyszukiwania każdy znaleziony element jest automatycznie zaznaczany) bieżącą wartością zaznaczonego tekstu plus nasze tagi HTML. Co to oznacza? Oznacza to, że fraza początkowo wyglądająca tak:

Boldface text

Na koniec będzie wyglądała tak:

<b>Boldface text</b>

Teraz kontynuujemy działanie pętli, wywołujemy metodę Execute i szukamy następnego wystąpienia tekstu docelowego. Co się dzieje, jeżeli nie ma następnego wystąpienia tekstu docelowego (czyli pogrubioną czcionką)? W takim przypadku właściwość Fund nie będzie miała wartości True, wywołamy z kolei isntrukcję Exit Do w celu opuszczenia naszej wcale nie takiej niekończącej się pętli.

To, synu, wyjaśnia, w jaki sposób ptaszki i pszczółki wyszukują w dokumencie programu Word sformatowany tekst i umieszczają tagi HTML przy każdym tekście wskazanym jako wynik wyszukiwania.

To powinno wystarczyć, ES. Przepraszam, że nie odpowiedziałem bezpośrednio na Twoje pytanie, a przekazałem odpowiedź, której udzieliłem mojemu synowi. Prawdę mówiąc, taka bezpośrednia odpowiedź mogłaby być bardzo krępująca. Tak, wiem: skrypty wyszukiwania sformatowanego tekstu i wstawiające tagi HTML w takim tekście są integralną częścią świata i nie ma się czego krępować. Ale tak już jest, że na niektóre tematy jest mi bardzo trudno się wypowiadać, zwłaszcza na łamach rubryki Cześć Skrypciarze.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office