Živimo u svijetu u kojem PHP programeri moraju komunicirati operativni sistem Windows. WMI (Windows Management Interface) Windows upravljanje) - jedan takav primjer je interakcija s Microsoft Officeom.

U ovom članku ćemo pogledati jednostavnu integraciju između Worda i PHP-a: generiranje Microsoftov dokument Polja za unos zasnovana na Wordu na HTML obrascu koristeći PHP (i njegovu ekstenziju Interop).

Pripremni koraci

Prije svega, uvjerimo se da imamo konfigurirano osnovno WAMP okruženje. Pošto je Interop prisutan samo na Windows-u, potreban nam je naš Apache server i PHP instalacija su raspoređeni na Windows mašina. U tom svojstvu koristim EasyPHP 14.1, koji je izuzetno jednostavan za instalaciju i konfiguraciju.

Sljedeće što trebate učiniti je instalirati Microsoft Office. Verzija nije mnogo bitna. Koristim Microsoft Office 2013 Pro, ali svaka verzija Officea starija od 2007 bi trebala biti u redu.

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

Ovdje možete vidjeti element Microsoft.Office.Interop.Word (podvučen na snimku ekrana). Ovo će biti gradnja koju ćemo koristiti u našoj demo verziji. 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đer sadrži druge sklopove (uključujući cijelu Office familiju) dostupne za korištenje u vašim programima (ne samo za PHP, već i za VB.net, C#, itd.).

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

Komentar: Za preuzimanje i instalaciju je dostupna samo distribucija PIA Microsoft Office 2010. Verzija sklopova u ovom paketu je 14.0.0, a verzija 15 se isporučuje samo sa Office 2013.

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

Sada možete preći na programiranje.

HTML forma

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

Imamo tekstualno polje za ime, grupu radio dugmadi za pol, klizač za uzrast 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 se može doći na adresu kao što je http://test/test/interop.

Serverski dio

Datoteka rukovaoca na strani servera je glavni cilj našeg razgovora. Za početak ću dati kompletan kod za ovu datoteku, a zatim ću ga objasniti korak po korak.

vidljivo = istina; $fn = __DIR__ . "\\template.docx"; $d = $w->Dokumenti->Otvoreno($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(); $key = $mapping[$index]; $value = $inputs[$key]; if ($key == "pol") ( if ($value == "m") $value = "Gospodin."; else $value = "Gospođa."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Polju $index: $key dodjeljujem vrijednost $value
  • "; ) echo "
"; echo "Obrada završena!

"; echo "Pišem, molim sačekajte...
"; $d->PrintOut(); sleep(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 popunili varijablu $inputs vrijednostima primljenim iz obrasca i kreirali prazan element sa printdate ključem (razgovarat ćemo zašto smo to učinili kasnije), dolazimo do četiri vrlo važna reda:

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

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

  • „Naziv“, „Verzija“, „Token javnog ključa“ – sve je to preuzeto iz informacija koje se mogu pogledati u „c:\Windows\assembly“.
  • “Kultura” je uvijek neutralna

Klasa koju želimo referencirati uvijek 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 staviti u radni način postavljanjem atributa visible na true .

Sljedeći korak je da otvorite dokument koji zahtijeva obradu i upišete instancu “dokumenta” u varijablu $d.

Da biste kreirali sadržaj u dokumentu na osnovu podataka obrasca, možete ići na nekoliko ruta.

Najgora stvar bi bila hardkodirati sadržaj dokumenta u PHP-u, a zatim ga izvesti u Word dokument. Izričito 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 pretraživanja i zamjene. 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 sadrži sljedeći isječak:

a uz pomoć PHP-a možemo ga lako zamijeniti sadržajem polja “Name” primljenim iz obrasca.

Jednostavna je i spašava nas od svih neugodnih posljedica na koje nailazimo u prvoj metodi. Samo trebamo odlučiti o ispravnom separatoru, u kom slučaju ćemo na kraju koristiti obrazac.

Preporučujem treću metodu, a ona se oslanja na dublje poznavanje 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 vam može pomoći da izbegnete pretragu celog teksta u dokumentu, što je dobro za performanse. Napominjem da ovo rješenje ima i nedostatke.

Word nije podržavao imenovane indekse za polja od samog početka. Čak i ako smo naveli imena za polja koja se kreiraju, i dalje moramo koristiti numeričke identifikatore ovih polja. Ovo također objašnjava zašto trebamo koristiti zasebnu funkciju (setupfields) za podudaranje indeksa polja s imenom polja iz obrasca.

U ovoj demo lekciji koristić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. Zato smo dodali prazan element printdate u niz $inputs. Bez toga, skripta će se i dalje pokretati i pokretati, ali PHP će izdati upozorenje da indeks printdate nije u nizu $inputs.

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

$d->PrintOut();

Metoda PrintOut uzima nekoliko opcionih parametara, a mi koristimo 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 pregledate izlaz prije nego što ga ispišete. U potpuno automatskom okruženju koristit ćemo naravno metodu PrintOut.

Možda ćete morati da sačekate neko vreme pre nego što isključite Word aplikaciju tako da je potrebno vreme da se zadatak štampanja 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 instrukcija za spremanje datoteke prije izlaska. Napravili smo promjene u dokumentu, ali ih ne želimo sačuvati jer nam je potreban čist predložak za kasniji rad.

Kada 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šana brzina obrade i još nešto o PIA-i

PHP je slabo kucan jezik. COM objekt tipa Object. Dok pišemo skriptu, 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 značajno usporiti brzinu razvoja. Da bih ubrzao 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 se čini. Dozvolite mi da vam pokažem par redaka u C#:

Word.Application w=nova Word.Application(); w.Visible=true; String path=Application.StartupPath+"\\template.docx"; Word.Document d=w.Documents.Open(path) 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 da postoji nekoliko operatora cast i da je potrebno ukucati varijable.

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

Drugi način da se ubrza razvoj PHP-a je pozivanje makroa 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, Microsoftova Office PIA dokumentacija, posebno dokumentacija prostora imena za svaku Office aplikaciju, je najdetaljniji referentni materijal koji je dostupan. 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 pokazali kako popuniti Word dokument podacima koristeći PHP COM biblioteke i mogućnosti interakcije Microsoft Office-a.

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

PHP COM ekstenzija otvara 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 „naprednog korisnika“, tj. Kreirali smo dokumente koje je bilo lako popuniti ručno. Danas želim da predložim proširenje ovog zadatka i pokušaj da se koristi mehanizam kontrole sadržaja za generisanje 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 (za sada ću namjerno izostaviti kako su oni povezani sa sadržajem dokumenta, ali se nadam da ću se vratiti o tome negde u narednim člancima).

Logično pitanje - šta je to? itemProps1.xml i slične komponente? Ove komponente pohranjuju opise izvora podataka. Najvjerovatnije, kako su programeri planirali, osim xml datoteka ugrađenih u dokument, trebalo je koristiti i druge, ali do sada je implementirana samo ova metoda.

Zašto su nam korisni? itemPropsX.xml? Činjenica da oni navode xml šeme (njihove targetNamespace), koji se koriste u nadređenom itemX.xml. To znači da ako smo uključili više od jednog prilagođenog xml-a u dokument, da bismo pronašli onaj koji nam je potreban, moramo proći kroz itemPropsX.xml komponente i pronađite pravo kolo, a time i pravo itemX.xml.

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

Pa, osnovni uvod je gotov, možemo početi s primjerom.

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

A ovo je XML na koji su polja dokumenta vezana

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

Korak 1: Kreirajte model podataka

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

Stoga ćemo model deklarirati u obliku strukture klase C#:

Javna klasa MeetingNotes ( public 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 Učesnici (dobiti; postaviti; ) javna lista Odluke ( get; set; ) ) javna klasa Odluka ( javni string Problem ( get; set; ) javni niz Rješenje ( get; set; ) javni niz Odgovoran ( get; set; ) javni DateTime ControlDate ( get; set; ) ) javni Učesnik klase (javni niz Ime (dobi; postavi;))

Uglavnom, ništa posebno, osim što su dodani atributi 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 zbog jedne stvari Ali

Nažalost, in trenutna verzija Office, očigledno, ima grešku, koja je sledeća: ako je u prilagođenom xml-u prije deklarisanjem glavnog imenskog prostora (onog iz kojeg Word treba da preuzme elemente za prikaz), deklarisanje nekog drugog, a zatim ponavljajuće kontrole sadržaja počinju da se prikazuju pogrešno (prikazano je samo onoliko elemenata koliko je bilo u samom predlošku - tj. odeljak koji se ponavlja ne radi ).

One. Ovo je xml koji 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 ovog vise nema:

< 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, ali iz nekog razloga nemam pristup da pošaljem greške u sistemu Office. A ni rasprava na MSDN forumu nije pomogla.

Općenito, neophodno rješenje. Da smo ručno generirali 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.

Potpuno ćemo potisnuti izlaz naših vlastitih imenskih prostora u XmlSerializer. Istina, ovaj pristup će funkcionirati samo ako mu zaista nisu potrebni (inače će i dalje biti dodani i to samo prije našeg).

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

var serijalizer = novi XmlSerializer(typeof (MeetingNotes));
var serializedDataStream = new 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 nastavljamo na sljedeći način:

  • kopirajte šablon i otvorite kopiju
  • pronađite traženi prilagođeni xml u njemu (pretražite po imenskom prostoru “urn:MeetingNotes”)
  • 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.SchemaTReference). ().Any(sr => sr.Uri.Value == "urn:MeetingNotes"!}

Svi se na ovaj ili onaj način bavimo tekstovima. Ponekad postoji potreba za generiranjem velike ili ne baš velike količine teksta za neki zadatak, na primjer, igranje formatiranja, ali nema teksta pri ruci, previše ste lijeni da ga sami napišete. sta da radim? Odgovor je jednostavan: koristite generator slučajnog teksta ugrađen u Word!

U uredniku Microsoft Word Možete brzo i jednostavno generirati tekst pomoću posebnih naredbi. Koristiću Word 2007 kao pokusnog kunića. Ove naredbe bi trebale raditi u svim verzijama Worda. Reći ću vam o tri metode generiranja teksta.

Metoda 1: Upotreba rand()

Funkcija rand() umeće lokalizovani uzorak teksta, 3 pasusa po 3 rečenice. Otvorite svoj Word, postavite kursor tamo gdje će se pojaviti hrpa teksta i unesite naredbu:

i pritisnite Enter. Sama funkcija rand će nestati i na njenom mjestu će se pojaviti 3 pasusa teksta:

Ali to nije sve. Ako vam treba puno teksta, možete koristiti rand funkciju s dodatnim argumentima, poput ovoga:

=rand(x,y)

gdje " x" znači broj pasusa, i " y"—broj rečenica u svakom paragrafu. Na primjer, =rand(20.5)će umetnuti 20 pasusa sa po pet fraza. A =rand(7) umetnut će 7 pasusa od po 3 rečenice.

Metoda 2: Upotreba lorem()

Da biste umetnuli dobri stari Lorem Ipsum kao uzorak, koristite funkciju lorem(). Upišite sljedeću naredbu i pritisnite Enter:

I dobijamo ovaj panlatinski tekst

Funkcija lorem() takođe lako prihvata dodatne argumente, kao što je rand(), u obliku broja pasusa i rečenica. Bez argumenata, funkcija podrazumevano umeće 3 pasusa sa po tri rečenice.

Metoda 3. funkcija rand.old().

Upotreba je slična prethodnim naredbama:

=rand.old()

i pritisnite Enter.

Funkcija rand.old() je ostavljena radi kompatibilnosti sa starim uredom, do 2003. godine uključujući. Način nanošenja je isti kao i prethodna dva, samo što će se tekst sastojati od istih rečenica „Pojedite još ovih mekih francuskih rolnica i popijte malo čaja“. Svako ko je povremeno radio sa fontovima zna ovu frazu.

Možete proslijediti argumente, kao u prva dva metoda.

To je sve, tekstovi su generisani, sada možete jesti još ovih mekih francuskih rolnica i piti čaj :)

Jeste li mogli zalijepiti tekst koristeći gore navedene funkcije?

Jednom, nakon sumiranja rezultata olimpijade, kada su učesnici morali da pošalju pisma sa rezultatima položenih (ili nepoloženih) predmeta, primetio sam da devojka sedi i rukama upisuje rezultate ispita, studentkinje. ime i druge informacije u predlošku pisma. Ispred nje je ležalo nekoliko listova ispisanih iz Excela s imenima i ocjenama. Copy-Paste, Ctrl+C - Ctrl+V, prevod punog imena iz nominativa u genitiv, i tako je posao već obavljen sa polovinom prvog od tri lista podataka. Što mislite, koliko je dugo mogla sjediti i kopirati podatke, a zatim provjeravati rezultat? Mislim da bi to potrajalo dosta vremena i da bi bilo dosta grešaka. Ali onda je ipak morala da potpisuje poštanske koverte... Bilo mi je žao njenog vremena i za nekoliko minuta sam pokazao kako se ovaj proces može automatizovati jednostavnim sredstvima. Nakon malog izleta, njen posao je završen za 20 minuta.

U ovoj lekciji ću vam pokazati kako možete brzo kreirati dokumente (pisma, pozivnice) trošeći minimalno vrijeme na to. IN različite verzije Ovaj opisani proces se različito naziva na različitim jezicima. Dakle, na ruskom je to „Spoji“, a na engleskom „Spajanje“.

Nadam se da su lančana pisma iz penzioni fond, poreska obavještenja se kreiraju na isti način :)

Alati

Za kreiranje dokumenata potreban nam je OpenOffice Writer. U njemu ćemo kreirati šablon pisma. Takođe će vam trebati OpenOffice Calc. U njemu ćemo kreirati bazu podataka sa imenima i adresama onih ljudi koje, na primjer, želimo pozvati na zabavu. MS Word i Excel se lako mogu koristiti umjesto programa iz OpenOffice paketa. Baza podataka se lako može pohraniti u MS Access. I tako, hajde da počnemo.

Kreiranje baze podataka

Baza podataka nije ništa drugo do tabela u MS Excel-u ili OpenOffice Calc-u u kojoj su podaci raspoređeni u kolone, a prvi red se koristi za imenovanje kolona. Kreirajmo, na primjer, kolone “puno ime”, “grad”, “indeks”, “adresa”. Unesite podatke i sačuvajte datoteku na disk.



Drugi izvori se takođe mogu koristiti kao baze podataka, kao što je Outlook adresar ili MS Access baza podataka.

Kreiranje šablona pisma

Kreiranje šablona pisma je malo komplikovanije. Budući da će podaci iz tabele (naše baze podataka) biti umetnuti u šablon takav kakav jeste, pismo mora biti napisano u skladu sa tim. Ako je vaše puno ime u nominativu u vašoj bazi podataka, malo je vjerovatno da ćete moći koristiti ovo polje u adresi „Poštovani,<ФИО>! a za kovertu u redu „Za:<ФИО>" U potonjem slučaju, puno ime će izgledati pomalo nespretno.

Prilikom sastavljanja šablona pisma, preporučujem da počnete sa sastavljanjem pisma nekome pravoj osobi. Možete to učiniti sami. Zatim u njemu označite podatke koje ćete preuzeti iz baze podataka i zamijeniti ih odgovarajućim poljima. Prije zamjene odabranog teksta u polju, preporučujem da obratite pažnju na to kojim slovom polje u bazi treba da počinje (malo ili veliko). Naravno, možete odmah kreirati predložak s poljima, ali tada možda nećete primijetiti neke greške, poput nedosljednosti u slučajevima.



Već u datom šablonu je jasno da će nam trebati puno ime u padežu genitiva i polje koje sadrži samo ime i srednje ime. Sa prvim poljem možemo zamijeniti “Prima” sa “Primalac” i tada će nam puno ime u nominativu savršeno odgovarati. Sa drugim poljem sve je nešto komplikovanije i moraćemo da kreiramo još jednu kolonu u bazi i popunimo je odgovarajućim podacima. U jednoj od narednih lekcija reći ću vam kako da to uradite automatski, ali za sada ćemo pretpostaviti da već imamo takvo polje.

Da biste umetnuli polje i povezali predložak sa bazom podataka, morate izvršiti sljedeći niz radnji. U OpenOffice Writer-u izaberite bazu podataka



i kliknite na “Definiraj”.



Zatim umetnite polje iz povezane baze podataka na željenu lokaciju. Da biste to uradili, pritisnite Ctrl+F2 ili u meniju „Umetanje“ izaberite „Polja“ i „Ostalo“. U prozoru koji se otvori odaberite karticu “Baze podataka”, u tipu polja odaberite “Polja spajanja pošte”, odaberite odgovarajuće polje iz baze podataka i kliknite “Umetni”. U ovom prozoru može se odabrati i stvarna baza podataka.



Nakon što je jedno polje umetnuto, možete, bez zatvaranja trenutnog prozora, odabrati tekst da ga zamijenite sljedećim poljem, odabrati polje i ponovo kliknuti na „Umetni“. I tako dalje za svako od polja.

Za MS Word situacija je donekle slična i, možda, zgodnija. Nakon kreiranja tabele u MS Excel-u, pokrenite MS Word i idite na karticu „Distribucije“. Na ovoj kartici možete vidjeti tri neophodna koraka: “Pokreni spajanje”, “Sastavi dokument i ubaci polja” i “Završi”. Postoji i međukorak „Prikaži rezultat“, ali nije obavezan.

I tako posao počinje odabirom dokumenta. To mogu biti slova, naljepnice ili običan Word dokument. Možete odmah pokrenuti čarobnjak za spajanje, koji će vas voditi kroz sve faze procesa. Sljedeći korak je odabir primatelja, odnosno baze podataka. Ovdje možete odabrati gotovu bazu podataka (na primjer, MS Excel tabelu kreiranu u prethodnoj fazi) ili kreirati novu listu. Nakon odabira liste, aktiviraju se dugmad “Ubaci polje za spajanje”, “Promijeni listu primalaca” itd. Kroz dijalog “Promijeni listu primalaca” koji se otvara odgovarajućim gumbom možete birati sa cijele liste samo zapisi potrebni za spajanje.







Prilikom umetanja polja, smatram da je zgodno označiti sva polja sivom bojom klikom na dugme “Istakni objedinjavanje polja”. U suprotnom, ako postoji mnogo takvih polja, mogu se izgubiti u tekstu.

I tako, šablon je spreman.

Generisanje slova

Posljednja faza je generiranje slova. U OpenOfficeu, da biste to uradili, u meniju „Alati“ izaberite „Čarobnjak za spajanje pošte...“ i prođite kroz sve predložene korake za spajanje našeg predloška sa bazom podataka.





U dijaloškom okviru vidimo da od 8 predloženih tačaka ne moramo izvršiti neke tačke. Dakle, već smo kreirali dokument i ne trebamo ga uređivati, već smo umetnuli i blok adrese. Ali hajde da stvari povedemo redom.

Prvo odaberite da kreiramo slova na osnovu trenutnog dokumenta i kliknite na “Dalje” na dnu prozora. Druga stvar je da odaberete da li ćemo imati ovo papirnato pismo ili e-mail. Da bi pismo bilo sačuvano u fajlu, trebalo bi da izaberete prvo. Kliknite na “Dalje”. Treća točka traži od nas da kreiramo blok adrese, ali pošto smo ga kreirali ručno, poništavamo sva polja i prelazimo na sljedeći korak. Ovdje se od nas traži da ubacimo zahtjev, ali ga već imamo, pa kliknemo „Dalje“. Šesta tačka je da uredite dokument, pogledate dokument sa umetnutim poljima iz baze podataka i po potrebi isključite neka polja.



Korak 7 traži od vas da uredite svaki od fajlova stvorenih kao rezultat povezivanja predloška sa bazom podataka. I konačno, u posljednjem, 8. koraku, možete odabrati šta ćete raditi sa primljenim dokumentima. Možete sačuvati, odštampati ili poslati e-mailom. U tom slučaju možete sačuvati sve dokumente u jednoj datoteci ili svaki dokument posebno.

U MS Wordu, proces spajanja se završava klikom na dugme Pronađi i spoji.



Iz padajućeg menija je očigledno da se sva pisma mogu štampati i slati putem e-pošte, ali nije očigledno da se sva mogu sačuvati u datoteku. Da biste spremili, morate odabrati prvu stavku - "Promijeni pojedinačne dokumente". Ovo će otvoriti novi dokument u kojem će se svako novo slovo nalaziti na novoj stranici i ovdje se ovaj fajl može sačuvati.

Zaključak

I tako, u ovoj lekciji ste naučili kako koristiti alat za spajanje za kreiranje dokumenata na osnovu predloška. Hajde da ukratko zapišemo redoslijed radnji:

  1. Potrebno je kreirati bazu podataka u procesoru tablica iz koje će se preuzimati podaci za popunjavanje polja.
  2. Morate kreirati šablon pisma.
  3. Izvršite spajanje i sačuvajte rezultat.

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. Odredite listove i redove potrebnih podataka


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 odgovarajuće dugme sa natpisom na desnoj strani Brojevi(njegov natpis će se promijeniti u Sve).

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


Postavite obrazac imenovanja za nove datoteke riječi:

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

Na kartici možete postaviti svoje znakove za uokvirivanje Postavke programe.

6. Kliknite na "Generiraj"


Kliknite na dugme Generiraj i napredak će se pojaviti na ekranu. Napraviće se tačno onoliko dokumenata (word fajlova) koliko je redova u excel datoteci uključenih 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 pomoću šablona

Besplatni generator Word fajlova koristeći šablon (Word fajl) na osnovu podataka Excel fajla

Radi na Mac OS, Windows i Linux

Omogućava vam da postavite nazive novih generiranih datoteka riječi

Omogućava vam da navedete listove i redove potrebnih podataka

Omogućava vam da navedete okolne znakove za nazive 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 klijentima. Svaka linija odgovara određenom klijentu. Imena su raspoređena u kolonu A, prezimena u koloni B i zanimanja u rubrici C.

Kliknite da vidite

Kreirajte word dokument (.doc ili .docx)


Kliknite da vidite

Kreirajte “šablon” (word fajl) za generisanje novih dokumenata (word fajlova). 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 svoje znakove uokvirivanja na kartici Postavke programe.

Odaberite putanje za datoteke i mape


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

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

Word šablonski fajl (*.doc, *.docx)- ovo je put do vašeg “template” (word fajl 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 da vidite

Navedite listove i redove potrebnih podataka


Kliknite da vidite

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 generiranju novih dokumenata. Na osnovu podataka svake navedene linije, kreiraće se poseban dokument (word fajl).

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