Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak na automatické vyplňování šablon ve Word využitím Microsoft Excel. Nebo-li potřebuji vyplnit hotový dokument wordovský dokument a na patřičná místa vložit údaje z tabulky v Excel (například jméno, telefon, Id-čko).
Tento článek pojednává jak vyplnit hotový wordovský dokument který obsahuje předpřipravený dokument a potřebujete jej vyplnit daty která máte v Excel a navíc uložit jako *.pdf s patřičným názvem (nebo *.doc, ale to již víte z minulého článku).
Tento článek budu doplňovat proto je pro přehlednost rozdělen na jednotlivé kapitoly:
Poznámka: Pominu, že ve Word je hromadná korespondence, kde data můžete načíst a vygenerovat. Potřebuji tvořit automaticky z Word.
Nejednodušší, protože mnohdy už hotovou šablonu dostanete, jen na místa kam se mají automaticky vkládat údaje z Excel použijete ve Word Ovládací prvky z karty Vývojář (Developer). Zde předpokládám základní znalost Word a umístění a pojmenování ovládacích prvků.
Pro připomenutí. Z karty Vývojář (Developer) vložit ovládací prvek obsahu pro prostý text (Plain text Content Control). A přes Vlastnosti (Properties) vložíte název Značky (Tagu).
Kromě nezbytných poznámek obsahuje i ony zmiňovaná textová pole z ovládacích prvků, která jsou otagovaný (značky pojmenovány) Name1 až Name3. To že jsou názvy popřehazovaný je záměr. Ukáži dva (tři) způsoby zápisu.
Poznámka: Nedaří-li se v kapitole ke stažení si můžete hotový wordovský dokument stáhnout.
Microsoft Word 16.0 Object Library
Než začnete pracovat (zapisovat) do Word je potřeba zkontrolovat zda máte v Reference ve VBA zapnutou knihovnu. Pro práci s Word je potřeba Microsoft Word 16.0 Object Library.
Ve VBA Excel v menu Tools > References. Pak jen stačí zaškrtnout knihovnu Microsoft Word 16.0 Object Library, pokud již nemáte (poznámka: ve starší/novější verzi může být číslo jiné ).
Nejprve otevřete existující dokument.
Dim objWord
Dim objDoc
Set objWord = CreateObject("Word.Application")
' v daném adresáři soubor s názvem k dispozici
Set objDoc = objWord.Documents.Open("D:\test\Vyplnovani.doc")
objWord.Visible = True
Poznámka: Kontrola zda dokument existuje si můžete doplnit sami. Stejně tak otevření jména přes proměnou.
Pak jen stačí uložit pod požadovaným jménem jako doc.
objDoc.SaveAs ("D:\test\Ulozeni.doc")
' zavří a ukončit
objDoc.Close
objWord.Quit
Set objWord = Nothing
Set objDoc = Nothing
Nebo-li otevřu a uložím pod jiným jménem
Dim objWord
Dim objDoc
Set objWord = CreateObject("Word.Application")
' v daném adresáři k dispozici
' musí mít patričné Controls, Ovládací prvky
Set objDoc = objWord.Documents.Open("D:\test\Vyplnovani.doc")
objWord.Visible = True
' možno uložit i jako doc
objDoc.SaveAs ("D:\test\Ulozeni.doc")
' zavřít a ukončit
objDoc.Close
objWord.Quit
Set objWord = Nothing
Set objDoc = Nothing
Mohu kontrolovat, zda existuje a smazat:
If Dir("D:\test\Ulozeni.doc") <> "" Then
Kill "D:\test\Ulozeni.doc"
End If
.SaveAs ("D:\test\Ulozeni.doc")
.Close ' zavřít dokument
Další ukázky viz kapitolu Tipy a triky
Pokud chci dokumenty ukládat jako pdf
objDoc.SaveAs2 "D:\test\Vyplneno_01.pdf", 17
Pokud by byl potřeba i celý kód
Dim objWord As Object
Dim objDoc As Object
Set objWord = CreateObject("Word.Application")
' v daném adresáři k dispozici
' musí mít patričné Controls, Ovládací prvky
Set objDoc = objWord.Documents.Open("D:\test\Vyplnovani.doc")
objWord.Visible = True
' uloží jako *.pdf
objDoc.SaveAs2 "D:\test\Vyplneno_01.pdf", 17
' zavří a ukončit
objDoc.Close
objWord.Quit
Set objWord = Nothing
Set objDoc = Nothing
Jen otevírat a uložit pod jiným názvem je málo. Tak šablonu vyplníme. V prvním kroku. Podle pořadí ovládacích prvků. Vyplňuje se skutečné pořadí. Ne to v jakém pořadí je vložíte. V šabloně jsme pro demonstraci třetí vložený ovládací prvek dal před první dva vložené (otestoval jsem že, jde o pořadí ve Wordovském dokumentu / ne pořadí vložení).
To že se zapisuje postupně ja asi logické. Pokud ale nechete spoléhat na pořadí, doporučuji využít odkazování se přes názvy značek (tagu). Ukázka jak na tag je v následující kapitole.
Odkázat se na pořadí je nejjednodušší:
'ContentControls - musí být k dispozici ve Word
' dodržuje pořadí jak jsou za sebou
objDoc.ContentControls(1).Range.Text = "pokus1"
objDoc.ContentControls(2).Range.Text = "pokus2"
objDoc.ContentControls(3).Range.Text = "pokus3"
Logičtější je využít jména značek (tagů). Přidate-li další ovládací prvek a vyplníte mu název značky (tagu), tak se na něj jednoduše odkážete a máte hotovo.
objDoc.SelectContentControlsByTag("Name1").Item(1).Range.Text = "Name1"
objDoc.SelectContentControlsByTag("Name2").Item(1).Range.Text = "Name2"
objDoc.SelectContentControlsByTag("Name3").Item(1).Range.Text = "Name3"
Celý kód může vypadat, včetně uložení do pdf:
' -------------------------------------------------
' - Vyplnování šablony ve Word a ulození jako pdf
' - Pavel Lasák, 2018, Verze 01 testovací
' - využitím Stackoverflow
' -------------------------------------------------
Dim objWord As Object
Dim objDoc As Object
' Dim objSelection
Set objWord = CreateObject("Word.Application")
' v daném adresáři k dispozici
' musí mít patričné Controls, Ovládací prvky
Set objDoc = objWord.Documents.Open("D:\test\Vyplnovani.doc")
objWord.Visible = True
' Set objSelection = objWord.Selection
'ContentControls - musí být k dispozici ve Word s příslušným Tagem
' nezaleží na pořadí
objDoc.SelectContentControlsByTag("Name1").Item(1).Range.Text = "Name1"
objDoc.SelectContentControlsByTag("Name2").Item(1).Range.Text = "Name2"
objDoc.SelectContentControlsByTag("Name3").Item(1).Range.Text = "Name3"
' uloží jako *.pdf
objDoc.SaveAs2 "D:\test\Vyplneno_01.pdf", 17
' zavří a ukončit
objDoc.Close
objWord.Quit
Set objWord = Nothing
Set objDoc = Nothing
Poznámka: Dynamickou změnu textů a názvu *.pdf kových souboru již nechám na vás.
Zde si budu ukládat další tipy, triky, které se mohou hodit.
Pokud máte šablonu nemusíte řešit ;)
objSelection.Font.Bold = True
objSelection.Font.Size = "22"
Přidat text
objSelection.TypeText ("Nový zápis..." & vbCrLf)
Odřádkování:
vbCrLf
...
...
Soubor Automaticky vyplňovat Wordovské šablony využitím Excel VBA ke stažení zdarma. Soubor využívá makra.
Soubor Wordovská šablona pro využití s Excel VBA ke stažení zdarma.
Budu rád za případná doplnění vylepšení.
Doplnění/Prosba: Kód mi sice funguje jak potřebuji, ale opravdu budu rád za případná vylepšení doplnění. Tipy jak vyřešit lépe a elegantněji. Určitě pomůže dalším.
Článek byl aktualizován: 19.09.2020 11:07
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Můžete být prvními co zanechají smysluplný komentář.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |