Powershell - praca z dokumentami ms word
Powershell jako dość uniwersalny język skryptowy pozwala na pracę z różnymi bibliotekami i aplikacjami. Jeżeli brakuje Wam dokumentacji do jakiegoś zagadnienia, które jest w C# lub Visual Basic, to nic straconego. Powershell nie odbiega daleko od tych języków, kwestia tylko składni, którą moglibyśmy dane zagadnienie ogarnąć. W tym artykule chciałbym przybliżyć zagadnienie dotyczące pracy z dokumentami ms word. Pracująć w biurze i wypełniając z dnia na dzień te same dokumenty doszedłem do momentu gdzie miałem już tego dosyć. Postanowiłem wprowadzić w życie drobną automatyzację tego procesu. Niestety, okazało się, że jeżeli zaczynamy zgłębiać ten temat, prędzej czy później zaczyna brakować wiedzy w internecie. Mam także kilka książek do powershell'a w domu, ale tu także brak konkretnych informacji, jak dany problem rozwiązać. Zapraszam do lektury.
Otwieranie i zamykanie dokumentu
Od czegoś należy zacząć. Przy tworzeniu dokumentu word przy pomocy skryptu powershell dobrze jest móc projektować nasz docelowy dokument lub szablon dokumentu. W tym celu polecam wam pisanie skryptu w jakimś edytorze z możliwością uruchomienia kodu, np. Windows Powershell ISE lub pisanie bezpośrednio w konsoli, sprawdzanie jak dokument się zachowa i wklejanie tekstu do edytora.
Poniższym poleceniem tworzymy nowy obiekt typu COM w powershell'u. Bardziej ludzkim językiem można napisać, że dajemy powershell'owi dostęp do pracy na dokumentach word. Taki klocek do zabawy. Aby pracować z word'em należy mieć zainstalowanego w systemie word'a.
$word = New-Object -ComObject word.application
Kolejne polecenie jakie będzie dla nas dosyć istotne przy tworzeniu naszego dokumentu to:
$word.Visible = $true
Jest to właściwość, która pozwala na widoczność tego co robimy. Gdy skrypt mamy zakończony to warto zmienić to ustawienie na $false. Przyspieszy to znacząco działanie skryptu i wyłączy możliwość edycji dokumentu podczas jego tworzenia.
Aby otworzyć nowy pusty dokument, należy wpisać w programie:
$doc = $word.documents.add()
Zamknięcie dokumentu natomiast wygląda w ten sposób:
$doc.SaveAs($outputPath)
$doc.Close()
$word.Quit()
gdzie kolejno idąc od góry mamy zapis z ścieżką i nazwą pliku do zapisu, zamknięcie dokumentu i wyjście z aplikacji ms word.
Dodawanie tekstu
Aby pracować na dokumencie, trzeba poinformować skrypt, że to właśnie na danym dokumencie będziemy pracować. Robimy to wpisując:
$selection = $word.Selection
Właściwość Selection wybiera obszar do edycji. W tym przypadku jest to nasz dokument word. Na cały dokument możemy mieć tylko jeden obszar do edycji i tylko jeden aktywny na całą aplikacje word. Jest to istotne, gdy tworzymy kilka dokumentów w jednym czasie.
Dzięki powyższej właściwości mozna także wpisywać tekst do dokumentu. Wygląda to mniej więcej tak:
$selection.TypeText("Ala ma kota.")
Nasz tekst jest jakąś częścią paragrafu. Aby zakończyć daną część tekstu zamieszczamy w naszym skrypcie linijkę:
$selection.TypeParagraph()
Po uruchomieniu powyższych dwóch poleceń powinniśmy na ekranie zobaczyć tekst Ala ma kota.
Formatowanie tekstu
Formatowanie tekstu może się odbywać przy użyciu już wbudowanych w word'a styli lub przez własne formatowanie tekstu. Można także użyć styli, a następnie zmienić niektóre właściwości tekstu. Style które mamy do dyspozycji będą się pokrywać z tymi, które widzimy z poziomu aplikacji word. Dlatego możemy albo w powershell'u wylistować wszystkie style, albo odwołać się do nazwy, którą widzimy w menu style w edytorze graficznym. Sprawdzenie dostępnych stylów z poziomu powershell'a możemy wykonać dopiero po utworzeniu nowego obiektu COM i wpisując komendę:
[Enum]::GetNames([Microsoft.Office.Interop.Word.WdBuiltinStyle]) | ForEach {[pscustomobject]@{Style=$_}}
Powinniśmy dostać podobny wynik do tego na obrazie:
Aktywujemy wybrany przez nas styl, wpisując np:
$selection.Style = $word.ActiveDocument.Styles[[Microsoft.Office.Interop.Word.WdBuiltinStyle]::wdStyleHeading1]
Lub wpisując nazwę stylu widoczną w dokumencie word w graficznym interfejsie(wersja polska):
$selection.Style = "Nagłówek 1"
i wersja angielska:
$selection.Style = "Heading1"
Wersja językowa jest tu największą bolączką, gdyż ze względu na różne nazwy styli musimy zastosować adekwatne odwołanie. Co za tym idzie, pisząc skrypt należałoby uwzględnić sprawdzenie wersji językowej office'a, na której będziemy pracować.
Z dodatkowych rzeczy, które warto znać, to rozmiar czcionki. Używamy komendy z wartością będącą rozmiarem czcionki:
$selection.Font.Size = <podany_przez_nas_rozmiar>
Pogrubienie tekstu w wartości 0 lub 1
$selection.font.Bold = <podany_przez_nas_numer>
Analogicznie używamy pochylenia i podkreślenia stosując parametr Italic i Underline w obiekcie Font.
Jako, że jest tu dużo użytecznych właściwości, to poniżej zamieszczam listę wszystkich właściwości w obiekcie Font:
- AllCaps
- Application
- Bold
- BoldBi
- Borders
- ColorIndex
- ColorIndexBi
- ContextualAlternates
- Creator
- DiacriticColor
- DisableCharacterSpaceGrid
- DoubleStrikeThrough
- Duplicate
- Emboss
- EmphasisMark
- Engrave
- Fill
- Glow
- Hidden
- Italic
- ItalicBi
- Kerning
- Ligatures
- Line
- Name
- NameAscii
- NameBi
- NameFarEast
- NameOther
- NumberForm
- NumberSpacing
- Outline
- Parent
- Position
- Reflection
- Scaling
- Shading
- Shadow
- Size
- SizeBi
- SmallCaps
- Spacing
- StrikeThrough
- StylisticSet
- Subscript
- Superscript
- TextColor
- TextShadow
- ThreeD
- Underline
- UnderlineColor
Jak widać, jest tego trochę. Niektóre właściwości mają na tyle logiczne nazwy, że można domyśleć się działania. Dlatego nie opisuję tych właściwości tutaj. Te właściwości, które mają mniej logiczne nazewnictwo zostawię Wam do rozgryzienia.
Kolejną często używaną rzeczą jest wyrównanie tekstu do lewej, do środka lub do prawej. Dana funkcjonalność zdefiniowana jest w obiekcie ParagraphFormat. Metoda Alignment przyjmuje wartości:
0 - wyrównanie do lewej,
1 - do środka,
2 - do prawej.
$selection.ParagraphFormat.Alignment = <podany_przez_nas_numer>
W obiekcie ParagraphFormat jest oczywiście dużo więcej właściwości, ale większość z nich odnosi się do specyficznych i rzadko używanych funkcji.
Nagłówek i stopka
Na koniec chciałbym Wam pokazać jak umieszczać nagłówek i stopkę w dokumencie. Obydwa elementy są bardzo podobne w użyciu. W pierwszej kolejności należy odwołać się do sekcji dokumentu. W tej sytuacji traktujemy nasz dokument jako jedną dużą sekcję
$section = $doc.sections.item(1)
Następnie wykonujemy odwołanie do nagłówka lub stopki:
$header = $section.Headers(1)
$footer = $section.Footers(1)
Jedynka w nawiasie w uproszczeniu odnosi się do wszystkich stron dokumentu.
Dodanie tekstu:
$header.Range.Text = "TEKST"
$footer.Range.Text = "TEKST"
Jeżeli zamiast tekstu w stopce chcielibyśmy dodać numery stron to możemy użyć polecenia:
$footer.PageNumbers.Add(1)
Tutaj numer w nawiasie informuje nas o pozycji numeru strony - wyrównanie do lewej, do środka i do prawej.
Zmiana formatowania tekstu w nagłówku i stopce odbywa się poprzez odwołanie do obiektu Range.Font, właściwości są podobne do tych używanych w formatowaniu zwykłego tekstu. Poniżej przykłady już z nadanymi wartościami.
$footer.Range.Font.Size = 15
$footer.Range.ParagraphFormat.Alignment = 0
Jeżeli tematyka tego artykułu Cię zainteresowała, to daj znać w komentarzu pod filmem na DTube lub YouTube lub napisz do mnie wiadomość. Może znajdzie się temat na kolejny artykuł w tej tematyce.
Praca z dokumentami MS Word z poziomu powershell'a, tworzenie i edycja dokumentów, użycie styli, odwołania do kontenera Microsoft.Office.Interop.Word, zapisanie dokumentu.
Szczegóły pracy, polecenia i opis znajdziesz na
https://it-ek.pl/programming/powershell/powershell_with_word.html
Jest to mój oryginalny artykuł.
Zachęcam do subskrypcji oraz pisania w komentarzach tematów jakie byście chcieli poruszyć w przyszłych filmach.
Zapraszam także na moją stronę
https://it-ek.pl
oraz na fb:
https://www.facebook.com/it.ek.przyszlosc.it?ref=aymt_homepage_panel
a także na patronite:
https://patronite.pl/it-ek
Subscribe and write in comments what else would you like to see on my channel.
Visit my website:
https://it-ek.pl
and my page on fb:
https://www.facebook.com/it.ek.przyszlosc.it?ref=aymt_homepage_panel
and also on patronite:
https://patronite.pl/it-ek
▶️ DTube
▶️ IPFS
nice
Congratulations @klapenhz! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word
STOP