Kako generirati dokumente u Wordu. Exwog - generator izvještaja iz Excela u Word po šablonu

Živimo u svijetu u kojem PHP programeri moraju s vremena na vrijeme komunicirati sa Windows operativnim sistemom. WMI (Windows Management Interface) je jedan takav primjer - interakcija sa Microsoft Officeom.

U ovom članku ćemo pogledati jednostavnu integraciju između Worda i PHP-a: generiranje Microsoft Word dokumenta iz polja za unos u HTML formi pomoću PHP-a (i njegove ekstenzije Interop).

Pripremni koraci

Prvi korak je osigurati da imamo postavljeno osnovno WAMP okruženje. Pošto je Interop dostupan samo na Windows-u, potrebno nam je da naš Apache server i PHP instalaciju budu raspoređeni na Windows mašini. U tom svojstvu koristim EasyPHP 14.1, koji je izuzetno jednostavan za instalaciju i konfiguraciju.

Sljedeći korak je instaliranje Microsoft Officea. Verzija nije mnogo bitna. Koristim Microsoft Office 2013 Pro, ali svaka verzija Officea starija od 2007 bi trebala raditi.

Također morate biti sigurni da imamo instalirane biblioteke za razvoj Interop aplikacije (PIA, Primary Interop Assemblies, Basic Interop Assemblies). To možete saznati ako otvorite Windows Explorer i odete u direktorij \ Assembly, a tamo bismo trebali vidjeti skup instaliranih sklopova:

Ovdje možete vidjeti element Microsoft.Office.Interop.Word (podvučen na snimku ekrana). Ovo će biti sklop koji ćemo koristiti u našem demo-u. Obratite posebnu pažnju na polja “Naziv sklopa”, “Verzija” i “Token javnog ključa”. Uskoro ćemo ih koristiti u našoj PHP skripti.

Ovaj direktorij takođe sadrži druge sklopove (uključujući cijelu Office familiju) dostupne za korištenje u njihovim programima (ne samo za PHP, već i za VB.net, C#, itd.).

Ako popis sklopova ne uključuje cijeli paket Microsoft.Office.Interop, onda moramo ili ponovo instalirati Office dodavanjem PIA-e ili ručno preuzeti paket od Microsofta i instalirati ga. Za detaljnija uputstva pogledajte ovu MSDN stranicu.

Komentar: za preuzimanje i instalaciju je dostupan samo PIA distributivni komplet za Microsoft Office 2010. Verzija sklopova u ovom paketu je 14.0.0, a verzija 15 dolazi samo sa Office 2013.

Konačno, morate omogućiti ekstenziju php_com_dotnet.dll u php.ini i ponovo pokrenuti server.

Sada možete početi sa programiranjem.

HTML forma

Budući da najveći dio ovog primjera pada na strani servera, kreirat ćemo jednostavnu stranicu s formom koja izgleda ovako:

Imamo tekstualno polje za ime, grupu radio dugmadi za pol, klizač za godine i oblast za unos teksta za unos poruke, kao i zloglasno dugme „Pošalji“.

Sačuvajte ovu datoteku kao “index.html” u virtuelnom host direktorijumu tako da joj se može pristupiti na adresi kao što je http: // test / test / interop.

Serverski dio

Datoteka rukovaoca na strani servera je glavni fokus našeg razgovora. Za početak ću dati kompletan kod ovog fajla, a zatim ću ga objasniti korak po korak.

vidljivo = istina; $ fn = __DIR__. "\\ template.docx"; $ d = $ w-> Dokumenti-> Otvori ($ fn); echo "Dokument je otvoren.


"; $ flds = $ d-> Polja; $ count = $ flds-> Count; echo" Postoje $ count polja u dokumentu.
"; eho"
    "; $ mapping = setupfields (); foreach ($ flds kao $ index => $ f) ($ f-> Select (); $ ključ = $ mapiranje [$ indeks]; $ vrijednost = $ inputi [$ ključ]; if ($ ključ == "pol") (if ($ vrijednost == "(! LANG: m") $value = "Gospodin."; else $value = "Gospođa."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Dodjeljujem polje $ indeks: $ ključ vrijednosti $
  • ";) echo"
"; echo" Obrada završena!

"; echo" Ukucajte, sačekajte...
"; $ d-> PrintOut (); spavanje (3); echo" Gotovo! "; $ w-> Quit (false); $ w = null; funkcija setupfields () ($ mapping = array (); $ mapping = "gender"; $ mapping = "ime"; $ mapping = "starost"; $ mapping = "msg"; $ mapping = "printdate"; vrati $ mapping;)

Nakon što smo vrijednosti dobijene iz obrasca upisali u varijablu $ inputs, a također kreirali prazan element sa printdate ključem (zašto smo to uradili - raspravljat ćemo kasnije), prelazimo na četiri vrlo važna reda:

$ assembly = "Microsoft.Office.Interop.Word, Verzija = 15.0.0.0, Kultura = neutralna, PublicKeyToken = 71e9bce111e9429c"; $ class = "Microsoft.Office.Interop.Word.ApplicationClass"; $ w = novi DOTNET ($ sklop, $ klasa); $ w-> vidljivo = istina;

PHP COM manipulator zahteva instanciranje klase unutar "sklopa". U našem slučaju radimo sa Wordom. Ako pogledate prvi snimak ekrana, možete zapisati kompletan potpis sklopa za Word:

  • „Ime“, „Verzija“, „Token javnog ključa“ su preuzete iz informacija koje se mogu pogledati u „c: \ Windows \ sklop“.
  • “Kultura” je uvijek neutralna

Klasa na koju želimo da upućujemo uvek se zove „ime sklopa“ + „.ApplicationClass“.

Postavljanjem ova dva parametra možemo dobiti objekat za rad sa Wordom.

Ovaj objekat može ostati u pozadini ili ga možemo pokrenuti postavljanjem visible atributa na true.

Sljedeći korak je otvaranje dokumenta kojem je potrebna obrada i pisanje instance “dokumenta” u varijablu $d.

Postoji nekoliko načina za kreiranje sadržaja na osnovu podataka obrasca u vašem dokumentu.

Najgora stvar koju treba učiniti bi bila hardkodirati sadržaj dokumenta u PHP-u, a zatim ga izvesti u Word dokument. Toplo preporučujem da to ne radite iz sljedećih razloga:

  1. Gubite fleksibilnost. Sve promjene u izlaznoj datoteci će zahtijevati promjene u PHP kodu.
  2. Ovo prekida razdvajanje kontrole i pogleda
  3. Primjena stilova na sadržaj dokumenta (poravnanje, fontovi, stilovi, itd.) u skripti će uvelike povećati broj linija koda. Programska promjena stilova je previše glomazna.

Druga opcija bi bila korištenje find and replace. PHP ima dobre ugrađene mogućnosti za ovo. Možemo kreirati Word dokument u koji ćemo postaviti naljepnice sa posebnim razdjelnicima, koje ćemo kasnije zamijeniti. Na primjer, možemo kreirati dokument koji će sadržavati sljedeći isječak:

a sa PHP-om ga lako možemo zamijeniti sadržajem polja "Name", dobijenim iz obrasca.

Jednostavna je i spašava nas od svih neugodnih posljedica s kojima se suočavamo u prvoj metodi. Samo treba da se odlučimo za tačan graničnik, u kom slučaju koristimo šablon.

Preporučujem treći način, a on se zasniva na dubljem poznavanju Worda. Koristićemo polja kao čuvare mesta, a koristeći PHP kod, direktno ćemo ažurirati vrednosti u poljima odgovarajućim vrednostima.

Ovaj pristup je fleksibilan, brz i u skladu s najboljim praksama programa Word. Takođe izbegava pretragu celog teksta u dokumentu, što je dobro za performanse. Imajte na umu da ovo rješenje ima i nedostatke.

Word nije podržavao imenovane indekse za polja od početka. Čak i ako smo naveli imena za polja koja se kreiraju, i dalje moramo koristiti numeričke identifikatore ovih polja. Također objašnjava zašto moramo koristiti posebnu funkciju (setupfields) za mapiranje indeksa polja u ime polja iz obrasca.

U ovom demo tutorijalu koristit ćemo dokument sa 5 MERGEFIELD polja. Postavićemo šablonski dokument na isto mesto kao i naš rukovalac skripte.

Imajte na umu da polje za datum štampanja nema odgovarajuće polje na obrascu. Zbog toga smo dodali prazan element printdate u niz $ inputs. Bez toga, skripta će i dalje raditi i raditi, ali PHP će izdati upozorenje da indeks printdate nije prisutan u nizu $ inputs.

Nakon zamjene polja novim vrijednostima, dokument ćemo ispisati koristeći

$ d-> PrintOut ();

Metoda PrintOut uzima nekoliko opcionih parametara, a mi ćemo koristiti njen najjednostavniji oblik. Ovo će odštampati jednu kopiju dokumenta na podrazumevanom štampaču priključenom na Windows mašinu.

Također možete pozvati PrintPreview da pogledate rezultat prije štampanja. U potpuno automatizovanom okruženju, mi ćemo naravno koristiti metodu PrintOut.

Morate pričekati neko vrijeme prije nego što izađete iz Worda jer je potrebno vrijeme da se zadatak za štampanje stavi u red čekanja. Bez odlaganja (3), metoda $ w-> Quit se izvršava odmah i posao se ne stavlja u red čekanja.

Konačno, pozivamo $ w-> Quit (false), što zatvara Word aplikaciju koju je pozvala naša skripta. Jedini parametar koji se prosljeđuje metodi je da vam kaže da sačuvate datoteku prije izlaska. Napravili smo izmene u dokumentu, ali ne želimo da ih sačuvamo jer nam je potreban čist šablon za kasniji rad.

Nakon što završimo s kodom, možemo učitati našu stranicu obrasca, popuniti neke vrijednosti i poslati ga. Slike ispod prikazuju izlaz skripte kao i ažurirani Word dokument:

Poboljšanje brzine obrade i još nešto o PIA-i

PHP je slabo kucan jezik. COM objekt tipa Object. U trenutku pisanja skripte, nemamo načina da dobijemo opis objekta, bilo da se radi o Word aplikaciji, dokumentu ili polju. Ne znamo koja svojstva ovaj objekat ima, niti koje metode podržava.

Ovo će znatno usporiti brzinu razvoja. Da biste ubrzali razvoj, preporučio bih pisanje funkcija prvo u C #, a zatim prevođenje koda u PHP. Mogu preporučiti besplatni IDE za C # razvoj pod nazivom “#develop”. Možete ga pronaći. Više ga volim nego Visual Studio jer je #develop manji, jednostavniji i brži.

Migracija C # koda na PHP nije tako strašna kao što zvuči. Dozvolite mi da vam pokažem nekoliko redova u C #:

Word.Application w = nova Word.Application (); w.Visible = istina; Putanja niza = Application.StartupPath + "\\ template.docx"; Word.Document d = w.Documents.Open (put) kao Word.Document; Word.Fields flds = d.Fields; int len ​​= flds.Count; foreach (Word.Field f u flds) (f.Select (); int i = f.Index; w.Selection.TypeText ("...");)

Primetićete da je C # kod veoma sličan PHP kodu koji sam pokazao ranije. C # je jezik sa jakom kucanjem, tako da ćete u ovom primjeru primijetiti nekoliko operatora kastinga, a varijable treba ukucati.

Određivanjem tipa varijable možete uživati ​​u jasnijem kodu i automatskom dovršavanju, a brzina razvoja je značajno povećana.

Drugi način da ubrzate razvoj PHP-a je da pozovete makro u Wordu. Izvodimo isti slijed radnji, a zatim ga spremamo kao makro. Makro je napisan u Visual Basic-u, koji je takođe lako prevesti u PHP.

I što je najvažnije, Office PIA dokumentacija iz Microsofta, posebno dokumentacija prostora imena za svaku Office aplikaciju, je najdetaljniji referentni materijal. Tri najčešće korištene aplikacije su:

  • Excel 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel(v=office.15).aspx
  • Word 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word(v=office.15).aspx
  • PowerPoint 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v=office.15).aspx

Zaključak

U ovom članku smo vam pokazali kako da popunite Word dokument podacima koristeći PHP COM biblioteke i Microsoft Office interoperabilnost.

Windows i Office se široko koriste u svakodnevnom životu. Poznavanje moći Officea/Window-a i PHP-a biće korisno za svakog PHP i Windows programera.

PHP COM ekstenzija otvara vam vrata za korištenje ove kombinacije.

Nastavljamo temu rada sa formama u Wordu, koju smo ranije započeli. U prethodnim člancima smo forme posmatrali samo sa stanovišta „naprednih korisnika“, tj. kreirali smo dokumente koji se lako popunjavaju ručno. Danas želim predložiti proširenje ovog zadatka i pokušati koristiti mehanizam kontrole sadržaja za generiranje dokumenata.

Prije nego što pređemo na naš neposredni zadatak, želim reći nekoliko riječi o tome kako se podaci za kontrole sadržaja pohranjuju u Word dokumente (namjerno ću izostaviti kako su oni vezani za sadržaj dokumenta, ali nadam se da ću se vratiti na ovo negde u narednim člancima).

Prirodno pitanje - šta je itemProps1.xml i slične komponente? Ove komponente pohranjuju opise izvora podataka. Najvjerovatnije, kako su programeri planirali, pored xml-ek ugrađenog u dokument, trebao je koristiti i druge, ali do sada je implementirana samo ova metoda.

Šta nam je korisno itemPropsX.xml? Činjenica da oni navode xml-šeme (njihove targetNamespace) koji se koriste u nadređenom itemX.xml... To znači da ako smo na dokument povezali više od jednog prilagođenog xml-a, da bismo pronašli onaj koji nam je potreban, moramo proći kroz itemPropsX.xml komponente i pronađite željeno kolo, a samim tim i željeno itemX.xml.

Sad još nešto. Nećemo ručno analizirati odnose između komponenti i tražiti potrebne koristeći samo osnovni API za pakiranje! Umjesto toga, koristićemo Open XML SDK (njegovi sklopovi su dostupni preko NuGet-a). Naravno, ranije nismo rekli ni riječi o ovom API-ju, ali za naš zadatak je potreban minimum od njega i sav će kod biti prilično transparentan.

Pa, glavni uvod je napravljen, možete početi s primjerom.

Po tradiciji ćemo uzeti isti “Izvještaj sa sastanka” koji smo nacrtali u članku. Da vas podsjetim da je ovako izgledao predložak dokumenta:

I ovako, XML na koji su polja dokumenta bila vezana

< meetingNotes xmlns ="urn:MeetingNotes" subject ="" date ="" secretary ="" > < participants > < participant name ="" /> < decisions > < decision problem ="" solution ="" responsible ="" controlDate ="" />

Korak 1. Kreiranje modela podataka

Zapravo, naš zadatak nije samo da generišemo dokument, već da kreiramo (barem u nacrtu) pogodan alat koji će koristiti i programer i korisnik.

Stoga ćemo model deklarirati kao strukturu C # klasa:

Javna klasa MeetingNotes (javne MeetingNotes () (Učesnici = nova lista (); Odluke = nova lista (); ) public string Subject (get; set;) public DateTime Datum (get; set;) public string Secretary (get; set;) public List Javna lista učesnika (dobi; postavi;). Odluke (get; set;)) javna klasa Odluka (javni string Problem (get; set;) javni string Rješenje (get; set;) javni string Odgovoran (get; set;) javni DateTime ControlDate (get; set;)) javni niz Učesnik klase (javni niz Ime (dobi; skup;))

Uglavnom, ništa posebno, osim dodavanja atributa za kontrolu XML serijalizacije (pošto se imena u modelu i traženi XML malo razlikuju).

Korak 2. Serijalizirajte gornji model u XML

Zadatak je, u principu, trivijalan. Ono što se zove "uzmi naš omiljeni XmlSerializer i kreni", ako ne za jedan ali

Nažalost, čini se da trenutna verzija Officea ima grešku, koja je sljedeća: ako prilagođeni xml front deklarisanje glavnog imenskog prostora (onog iz kojeg Word treba da preuzme elemente za prikaz), deklarisanje drugog, zatim ponovljene kontrole sadržaja počinju da se prikazuju pogrešno (prikazano je samo onoliko elemenata koliko je bilo u samom šablonu - tj. ponavljajući deo ne radi ).

One. ovaj xml radi:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

i ovaj takodje:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" xmlns:t ="urn:TTT" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

ali ovaj više nije:

< test xmlns:t ="urn:TTT" xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

Pokušao sam da pošaljem grešku Microsoft podršci na Connect-u, ali iz nekog razloga nemam pristup da pošaljem greške preko Officea. A ni rasprava na MSDN forumu nije pomogla.

Općenito, neophodan zaobilazni manevar. Da smo ručno formirali XML, ne bi bilo problema – sve bismo sami uradili. Međutim, u ovom slučaju, zaista želim koristiti standardni XmlSerializer, koji po defaultu dodaje nekoliko svojih imenskih prostora u izlazni XML, čak i ako se ti prostori imena ne koriste.

Učinit ćemo potpuno potiskivanje izlaza naših vlastitih imenskih prostora u XmlSerializer. Istina, ovaj pristup će funkcionirati samo ako mu zaista nisu potrebni (inače će se i dalje dodati i to samo prije našeg).

Zapravo, cijeli kod (pod uvjetom da je varijabla bilješke sa sastanka sadrži prethodno popunjen objekat MeetingNotes):

var serijalizer = novi XmlSerializer (typeof (MeetingNotes));
var serializedDataStream = novi MemoryStream ();

var namespaces = new XmlSerializerNamespaces ();
namespaces.Add (“”, “”);

serializer.Serialize (serializedDataStream, meetingNotes, namespaces);
serializedDataStream.Seek (0, SeekOrigin.Begin);

Korak 3. Unesite rezultirajući XML u Word dokument.

Ovdje radimo sljedeće:

  • kopirajte šablon i otvorite kopiju
  • pronađite traženi prilagođeni xml u njemu (pretražite po imenskom prostoru "Urna: bilješke sa sastanka")
  • zamijenite sadržaj komponente našim XML-om

File.Copy (templateName, resultDocumentName, true); koristeći (var document = WordprocessingDocument.Open (resultDocumentName, true)) (var xmlpart = document.MainDocumentPart.CustomXmlParts .Single (xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaTReferences). () .Bilo koji (sr => sr.Uri.Value == "(! LANG: urn: MeetingNotes"!}

U prethodnim člancima serije "Automatizacija popunjavanja dokumenata" govorio sam o tome kako napraviti korisnički interfejs aplikacije, organizovati validaciju ulaznih podataka i dobiti broj rečima bez upotrebe VBA koda. U ovom završnom članku ćemo govoriti o magiji - prenošenju svih potrebnih vrijednosti iz Excel radne knjige u Word dokument. Dozvolite mi da vam pokažem šta bi trebao biti rezultat:

Opis mehanizma

Za početak, opisat ću općenito kako će se podaci prenijeti u Word dokument. Prije svega, potreban nam je predložak Word dokumenta koji sadrži sve oznake, tabele i onaj dio teksta koji će ostati nepromijenjen. U ovom predlošku morate odrediti mjesta na kojima će biti zamijenjene vrijednosti iz Excel radne knjige - najprikladniji način za to je korištenje oznaka. Nakon toga, potrebno je organizirati Excel podatke na način da se poklapaju sa Word šablonom i na kraju, ali ne i najmanje važno, samu proceduru prijenosa napisati u VBA.

Dakle, prvo prvo.

Kreirajte predložak Word dokumenta

Ovdje je sve krajnje jednostavno - kreiramo običan dokument, kucamo i formatiramo tekst, općenito, nastojimo dobiti potrebnu formu. Na onim mjestima gdje će biti potrebno zamijeniti vrijednosti iz Excela, morate kreirati oznake. To se radi na sljedeći način:

Dakle, moraćete da kreirate sve obeleživače, odnosno označite sva mesta na koja će biti umetnuti podaci iz Excel-a. Dobivenu datoteku morate sačuvati kao "MS Word šablon" koristeći stavku menija "Datoteka" -> "Sačuvaj kao...".

Priprema Excel podataka

Radi praktičnosti, odlučio sam sve podatke koje je potrebno prenijeti u Word dokument smjestiti na poseban radni list pod nazivom Bookmarks - bookmarks. Ovaj list ima dvije kolone: ​​prvi sadrži nazive oznaka (tačno onako kako su imenovani u Word dokumentu), a drugi sadrži odgovarajuće vrijednosti koje treba premotati.

Neke od ovih vrijednosti se dobijaju direktno iz lista za unos podataka, a neke iz pomoćnih tabela koje se nalaze na listu podrške. U ovom članku neću analizirati formule koje izračunavaju tražene vrijednosti, ako nešto nije jasno - postavljajte pitanja u komentarima.

U ovoj fazi važno je ispravno navesti sve nazive oznaka - od toga ovisi ispravnost prijenosa podataka.

Procedura prijenosa

Ali ovo je najzanimljivija stvar. Postoje dvije opcije za izvršavanje koda za prijenos podataka:

  • Kod se izvršava u Excel radnoj svesci, podaci se prosleđuju u Word jednu po jednu vrednost i odmah stavljaju u dokument.
  • Kod se izvršava u posebnom Word dokumentu, svi podaci se prenose iz Excela u jednoj seriji.

Sa stanovišta brzine izvršenja, posebno s velikim brojem oznaka, druga opcija izgleda mnogo atraktivnije, ali zahtijeva složenije radnje. Ovo sam koristio.

Evo šta trebate učiniti:

  • Kreirajte predložak Word dokumenta s omogućenim makroima. Ovaj šablon će sadržati izvršni VBA kod.
  • U kreirani šablon potrebno je postaviti program napisan u VBA. Da biste to učinili, kada uređujete predložak, pritisnite kombinaciju tipki Alt + F11 i unesite programski kod u otvoreni prozor uređivača Visual Basica.
  • U radnoj svesci Excel napišite kod koji poziva proceduru popunjavanja iz novokreiranog Word predloška.

Neću davati tekst procedure u članku - lako se može pogledati u datoteci FillDocument.dotm koja se nalazi u folderu Template u arhivi sa primerom.

Kako sve ovo možete iskoristiti da riješite svoj određeni problem?

Razumijem da na riječima sve izgleda vrlo jednostavno, ali šta se dešava u praksi? Predlažem da jednostavno koristite gotovu opciju. Preuzmite arhivu sa primjerom, u Excel radnoj svesci pritisnite Alt + F11 da otvorite Visual Basic editor i pročitate sve moje komentare o programu. Da biste promijenili program koji odgovara vašim potrebama, potrebno je samo promijeniti vrijednost nekoliko konstanti koje se nalaze na samom početku programa. Možete slobodno kopirati cijeli programski tekst u svoj projekat.

Struktura arhiva

Arhiva priložena ovom članku sadrži nekoliko datoteka.

Glavna datoteka je Excel radna knjiga pod nazivom "Kreiraj potvrde". U ovoj radnoj svesci postoje 4 radna lista, od kojih su samo dva prikazana: "Input" - list za unos podataka i "Baza podataka" - arhiva svih unesenih dokumenata.

Fascikla Templates sadrži predloške Word dokumenata. Jedan je šablon koji sadrži program za popunjavanje obeleživača, a drugi obrazac za popunjavanje. Šablon sa programom možete koristiti bez izmjena, ali će obrazac za popunjavanje, naravno, morati biti prerađen u skladu sa vašim potrebama.

Kako preraditi primjer "za sebe"?

  1. Pripremite predložak Word dokumenta koji trebate popuniti. U njemu kreirajte sve potrebne oznake i sačuvajte ga kao "MS Word šablon".
  2. Kopirajte datoteku FillDocument.dotm iz arhive priložene ovom članku u fasciklu sa pripremljenim šablonom. Ovaj fajl je odgovoran za popunjavanje obeleživača šablona i ne morate ništa da menjate u njemu.
  3. Pripremite Excel radnu svesku za unos podataka. Na vama je da odlučite da li će imati neko "napredno" korisničko sučelje i izvršiti razne pametne proračune. Glavna stvar je da sadrži radni list s tablicom korespondencije između naziva oznake u Word predlošku i vrijednosti koju treba zamijeniti.
  4. Umetnite VBA programski kod iz datoteke uzorka u pripremljenu radnu svesku. Zamijenite sve konstante prema vašem projektu.
  5. Testirajte ispravnost rada.
  6. Koristite ga aktivno!

A, prezimena u koloni B i zanimanja u rubrici C.

2. Kreirajte word dokument (.doc ili.docx)


(A), (B) i (C).

(A), (B) i (C) (A)- ime, (B)- prezime, (C)- profesija.

Postavke programe.

3. Odaberite putanje za datoteke i mape


Odaberite

4. Postavite listove i redove podataka koje želite


Podaci u Excel fajlu

Redovi podataka Excel datoteke Podaci u Excel fajlu

1 .

Ako želite da svi listovi i/ili redovi vaše excel datoteke sa podacima učestvuju u formiranju dokumenta, kliknite na desno dugme sa natpisom Brojevi(u ovom slučaju, njegov natpis će se promijeniti u Sve).

5. Postavite predložak za nazive novih datoteka riječi


Postavite šablon za nazive novih word fajlova:

Novi predložak za nazive datoteka riječi je šablon za nazive novih dokumenata (word fajlova) koje generiše program. Ovdje predložak imena sadrži nazive stupaca excel datoteke, okružene vitičastim zagradama: (A) i (B)... Prilikom generisanja novog dokumenta, program će zamijeniti sve (A) i (B) odgovarajuće vrijednosti ćelija iz excel datoteke - to će biti naziv novog dokumenta (word datoteke).

Možete postaviti svoje simbole uokvirivanja na kartici Postavke programe.

6. Kliknite na "Generiraj"


Kliknite na dugme Generiraj i napredak će se pojaviti na ekranu. Broj dokumenata (word-fajlova) biće kreiran tačno onoliko redova excel-datoteke koji su uključeni u formiranje.

7. Sve


Svi dokumenti (word fajlovi) su kreirani i nalaze se u fascikli navedenoj u Folder za spremanje novih datoteka riječi... sve :)

Exwog - generator izvještaja iz Excela u Word po šablonu

Besplatan generator Word datoteka iz šablona (Word fajl) na osnovu podataka Excel fajla

Radi na Mac OS, Windows i Linux

Omogućava vam da navedete imena novih generiranih datoteka riječi

Omogućava vam da definirate listove i linije željenih podataka

Omogućava vam da postavite znakove za zatvaranje naziva kolona programa Excel

Jednostavan za korištenje

Spremite svoje podatke u Excel format (.xls i .xlsx) i generirajte Word datoteke (.doc i .docx) u nekoliko klikova :)


Kako radi?

Pogledajte svoj excel fajl


U ovom primjeru, Excel datoteka sadrži informacije o korisniku. Svaka linija odgovara određenom klijentu. Imena se nalaze u koloni A, prezimena u koloni B i zanimanja u rubrici C.

Kliknite za pregled

Kreirajte word dokument (.doc ili.docx)


Kliknite za pregled

Kreirajte "template" (word-file) za generiranje novih dokumenata (word-files). Ovdje tekst "template" sadrži nazive stupaca excel datoteke, okružene vitičastim zagradama: (A), (B) i (C).

Program će generirati nove dokumente prema "šablonu" zamjenjujući sve (A), (B) i (C) odgovarajuće vrijednosti ćelije iz excel datoteke: (A)- ime, (B)- prezime, (C)- profesija.

Također možete postaviti vlastite simbole uokvirivanja na kartici Postavke programe.

Odaberite putanje za datoteke i mape


Odaberite putanje za datoteke i mape (tipke označene Odaberite). U programu postavljate sljedeće putanje:

Excel datoteka s podacima (* .xls, * .xlsx)- ovo je put do vaše excel datoteke (informacije o klijentu);

Word šablonski fajl (* .doc, * .docx)- ovo je put do vašeg "template" (word-file kreiran u prethodnom koraku);

Folder za spremanje novih datoteka riječi- ovo je put do foldera u koji će program pohraniti nove generirane dokumente.

Kliknite za pregled

Postavite listove i redove podataka koje želite


Kliknite za pregled

Navedite brojeve listova i redova vaše excel datoteke s podacima (informacijama o klijentima) za koje želite generirati dokumente:

Podaci u Excel fajlu- brojevi listova vaše excel datoteke koji će učestvovati u formiranju novih dokumenata;

Redovi podataka Excel datoteke- brojevi redova listova (listova navedenih u Podaci u Excel fajlu) vaše excel datoteke koja će učestvovati u formiranju novih dokumenata. Zaseban dokument (word fajl) će biti kreiran na osnovu podataka svake navedene linije.

Numeracija listova i redova u programu počinje sa 1 .