Centrum Skryptów - Microsoft Office

W jaki sposób mogę pobrać z dokumentu Word akapity napisane w określonym stylu? 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.

W jaki sposób mogę pobrać z dokumentu Word akapity napisane w określonym stylu?

Cześć, Skrypciarzu! Jak można zapisać w osobnym pliku wszystkie akapity dokumentu Word sformatowane w określonym stylu, np. Nagłówek 1?

-- Janusz

Cześć, Janusz. Wiesz, kiedy przeczytaliśmy pytanie, pomyśleliśmy sobie: - Fajnie, ciekawe. Tylko po kiego grzyba robić coś takiego? Potem jeden z nas przypomniał sobie, ile (dużo) godzin spędził w pewnym tygodniu, przekopując się przez dokumenty Word i ręcznie kopiując i wklejając wszystkie nagłówki z zamiarem stworzenia spisu treści. Stwierdziliśmy wtedy, że skrypt taki istotnie może się przydać, ale skoro my musieliśmy przejść przez taką traumę, to czemu niby innym ma być to oszczędzone?

Ale kiedy ktoś zauważył, że Skrypciarze zasługują na cierpienie, a większość ludzi nie. Zdecydowaliśmy się wtedy, że jednak napiszemy skrypt pobierający wybrane akapity z dokumentu Word. Mamy więc prosty skrypt wyszukujący akapity sformatowane w stylu Nagłówek 1. Jeśli jakiś akapit napisany jest w tym stylu, skrypt zostawia go w spokoju; pozostałe akapity zostają skasowane.

Czemu tak? No cóż, wygląda na to, że to najłatwiejszy sposób by poradzić sobie z problemem: zamiast kopiować nagłówki z jednego dokumentu do drugiego, po prostu usuniemy wszystko, co nagłówkiem nie jest. Następnie za pomocą metody SaveAs zapiszemy plik pod inną nazwą. Wynik końcowy? Mamy ciągle nienaruszony dokument oryginalny oraz dokument nowy, zawierający tylko akapity sformatowane jako Nagłówek 1.

Oto skrypt:

Set objWord = CreateObject("Word.Application")

objWord.Visible = True

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



Set objSelection = objWord.Selection

Set colParagraphs = objDoc.Paragraphs



For Each objParagraph in colParagraphs

    If objParagraph.Style <> "Heading 1" Then

        objParagraph.Range.Select

        objSelection.Cut

    End If    

Next



objDoc.SaveAs("C:\Scripts\Headings.doc")

objWord.Quit

Najpierw tworzymy wystąpienie obiektu Word.Application i włączamy właściwość Visible; dzięki temu na ekranie widzieć będziemy wszystko co się dzieje. Następnie używamy metody Open do otwarcia pliku C:\Scripts\Test.doc.

Uwaga. Jeśli zechcecie wypróbować skrypt, będzie dużo ciekawiej, jeśli plik Test.doc rzeczywiście zawierać będzie kilka akapitów sformatowanych w stylu 1.

Tworzymy wystąpienie obiektu Word Selection, po czym za pomocą poniższego wiersza kodu tworzymy odwołanie do obiektu – kolekcji Paragraphs naszego dokumentu:

Set colParagraphs = objDoc.Paragraphs

Jak się pewnie domyślacie, kolekcja Paragraphs zawiera wszystkie akapity naszego dokumentu. Następnie włączamy pętlę For Each, która przejść ma przez tę kolekcję. Dla każdego z akapitów kolekcji (a co za tym idzie, dla każdego akapitu dokumentu) użyjemy poniższego wiersza kodu, który sprawdzi, czy akapit sformatowany jest w stylu Nagłówek 1:

If objParagraph.Style <> "Heading 1" Then

Jeśli tak jest w istocie, wracamy do pętli i sprawdzamy następny element kolekcji. Co jednak, jeśli akapit nie jest w ten sposób sformatowany (tzn. nasza instrukcja If ma wartość prawdy)? W takim wypadku użyjemy poniższych dwu wierszy kodu w celu zaznaczenia i wycięcia akapitu z dokumentu:

objParagraph.Range.Select

objSelection.Cut

Po przejściu pętli przez całą kolekcję (i usunięciu akapitów sformatowanych w innym stylu niż Nagłówek 1) pozostaną nam tylko interesujące nas nagłówki. Wystarczy teraz wywołać metodę SaveAs i zapisać dokument z nową nazwą (w naszym wypadku C:\Scripts\Headings.doc), po czym zamknąć program Word. Tym właśnie zajmą się poniższe dwa wiersze kodu:

objDoc.SaveAs("C:\Scripts\Headings.doc")

objWord.Quit

Nasze sumienie mówi, że dobrze zrobiliśmy dzieląc się z Wami tym skryptem. (Chociaż przyznamy, że Wasze cierpienie też sprawiłoby nam satysfakcję… Ale mniejszą.)

Swoją drogą, jeśli zaostrzyliśmy Wam apetyt na skrypty w Microsoft Office, zapraszamy do artykułów Office Space (j.ang.), które ukazują się w każdy wtorek i czwartek.

 Do początku strony Do początku strony


Centrum Skryptów - Microsoft Office