Hogyan készítsünk dokumentumokat Wordben. Exwog - jelentésgenerátor Excelből Wordbe sablon alapján

Olyan világban élünk, ahol a PHP-fejlesztőknek időről időre kapcsolatba kell lépniük a Windows operációs rendszerrel. A WMI (Windows Management Interface) egy ilyen példa – a Microsoft Office-szal való interakció.

Ebben a cikkben egy egyszerű integrációt tekintünk meg a Word és a PHP között: Microsoft Word-dokumentumot generálunk beviteli mezőkből HTML-formátumban PHP (és annak Interop kiterjesztése) segítségével.

Előkészületi lépések

Az első lépés, hogy megbizonyosodjunk arról, hogy be van állítva egy alapvető WAMP környezet. Mivel az Interop csak Windowson érhető el, az Apache-kiszolgálónkat és a PHP-telepítést Windows-gépen kell telepíteni. Ebben a minőségben az EasyPHP 14.1-et használom, ami rendkívül könnyen telepíthető és konfigurálható.

A következő lépés a Microsoft Office telepítése. A verzió nem nagyon fontos. Microsoft Office 2013 Pro-t használok, de az Office 2007-nél régebbi verzióinak működnie kell.

Gondoskodnia kell arról is, hogy az Interop alkalmazás fejlesztéséhez telepítve legyenek könyvtáraink (PIA, Primary Interop Assemblies, Basic Interop Assemblies). Megtudhatja, hogy nyissa meg a Windows Intézőt, és lépjen a könyvtárba \ assembly, és ott látnunk kell a telepített összeállítások készletét:

Itt láthatja a Microsoft.Office.Interop.Word elemet (a képernyőképen aláhúzva). Ez lesz az az összeállítás, amelyet a bemutatónkban fogunk használni. Kérjük, fordítson különös figyelmet az „Assembly name”, „Version” és „Public key token” mezőkre. Hamarosan használni fogjuk őket a PHP szkriptünkben.

Ez a könyvtár más összeállításokat is tartalmaz (beleértve a teljes Office családot), amelyek a programjaikban használhatók (nem csak PHP-hez, hanem VB.net-hez, C #-hez stb. is).

Ha az összeállítási lista nem tartalmazza a teljes Microsoft.Office.Interop csomagot, akkor vagy újra kell telepítenünk az Office-t a PIA hozzáadásával, vagy manuálisan kell letöltenünk a csomagot a Microsofttól és telepítenünk kell. Részletesebb utasításokért tekintse meg ezt az MSDN oldalt.

Megjegyzés: csak a Microsoft Office 2010 PIA disztribúciós készlete érhető el letöltésre és telepítésre. A csomagban található szerelvények verziója 14.0.0, a 15-ös verzió pedig csak az Office 2013-mal érkezik.

Végül engedélyeznie kell a php_com_dotnet.dll kiterjesztést a php.ini fájlban, és újra kell indítania a kiszolgálót.

Most elkezdheti a programozást.

HTML űrlap

Mivel a példa nagy része a szerveroldalra esik, létrehozunk egy egyszerű oldalt egy űrlappal, amely így néz ki:

Van egy szövegmező a névhez, egy rádiógombcsoport a nemhez, egy csúszka az életkorhoz, és egy szövegbeviteli terület az üzenetek beírásához, valamint a hírhedt „Küldés” gomb.

Mentse el ezt a fájlt „index.html” néven a virtuális gazdagép könyvtárába, hogy olyan címen érhesse el, mint a http://test / test / interop.

Szerver rész

Beszélgetésünk középpontjában a szerveroldali kezelőfájl áll. Először megadom ennek a fájlnak a teljes kódját, majd lépésről lépésre elmagyarázom.

látható = igaz; $ fn = __DIR__. "\\ template.docx"; $ d = $ w-> Dokumentumok-> Megnyitás ($ fn); echo "A dokumentum nyitva van.


"; $ flds = $ d-> Mezők; $ count = $ flds-> Count; echo" $ count mezők vannak a dokumentumban.
"; visszhang"
    "; $ leképezés = setupfields (); foreach ($ flds mint $ index => $ f) ($ f-> Select (); $ kulcs = $ leképezés [$ index]; $ érték = $ bemenetek [$ kulcs]; if ($ kulcs == "nem") (if ($ érték == "(! LANG: m") $value = "Úr."; else $value = "Kisasszony."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • A $ index: $ kulcs mezőt hozzárendelem a $ értékhez
  • ";) visszhang"
"; echo" Feldolgozás befejeződött!

"; echo" Gépelés, kérem, várjon...
"; $ d-> Nyomtatás (); alvás (3); visszhang" Kész! "; $ w-> Kilépés (false); $ w = null; függvénybeállítási mezők () ($ leképezés = tömb (); $ leképezés = "gender"; $ mapping = "név"; $ mapping = "age"; $ mapping = "üzenet"; $ mapping = "nyomtatási dátum"; return $ mapping;)

Miután az űrlapból kapott értékeket beírtuk a $ bemeneti változóba, és létrehoztunk egy üres elemet a printdate kulccsal (miért tettük ezt - későbbiekben tárgyaljuk), továbblépünk négy nagyon fontos sorra:

$ assembly = "Microsoft.Office.Interop.Word, verzió = 15.0.0.0, kultúra = semleges, PublicKeyToken = 71e9bce111e9429c"; $ class = "Microsoft.Office.Interop.Word.ApplicationClass"; $ w = új DOTNET ($ összeállítás, $ osztály); $ w-> látható = igaz;

A PHP COM manipulátor megköveteli egy osztály példányosítását az "összeállításon belül". Esetünkben Word-el dolgozunk. Ha megnézi az első képernyőképet, felírhatja a Word teljes összeállítási aláírását:

  • A „Név”, „Verzió”, „Public Key Token” mind a „c: \ Windows \ assembly” fájlban megtekinthető információkból származnak.
  • A „kultúra” mindig semleges

Az osztály, amelyre hivatkozni akarunk, mindig az „összeállítás neve” + „.ApplicationClass” nevet viseli.

Ennek a két paraméternek a beállításával egy objektumot kaphatunk a Word-del való munkához.

Ez az objektum maradhat a háttérben, vagy elindíthatjuk, ha a látható attribútumot igazra állítjuk.

A következő lépés az, hogy nyissa meg a feldolgozásra szoruló dokumentumot, és írja be a „dokumentum” példányát a $ d változóba.

A dokumentumban lévő űrlapadatok alapján többféleképpen hozhat létre tartalmat.

A legrosszabb az lenne, ha a dokumentum tartalmát PHP-ben kódolnánk, majd egy Word dokumentumba írnánk ki. Erősen javaslom, hogy ne tedd ezt a következő okok miatt:

  1. Elveszted a rugalmasságod. A kimeneti fájl bármilyen módosítása megköveteli a PHP kód módosítását.
  2. Ez megtöri az irányítás és a nézet szétválasztását
  3. Stílusok alkalmazása a dokumentum tartalmára (igazítás, betűtípusok, stílusok stb.) egy szkriptben nagymértékben megnöveli a kódsorok számát. A stílusok programozott megváltoztatása túl nehézkes.

Egy másik lehetőség a keresés és csere használata. A PHP-nek jó beépített lehetőségei vannak erre. Létrehozhatunk egy Word dokumentumot, amelyben speciális határolójelekkel ellátott címkéket helyezünk el, amelyeket később pótolunk. Például létrehozhatunk egy dokumentumot, amely a következő részletet tartalmazza:

PHP-vel pedig egyszerűen helyettesíthetjük az űrlapból nyert "Név" mező tartalmával.

Ez egyszerű, és megóv minket minden kellemetlen következménytől, amellyel az első módszerrel szembesülünk. Csak a helyes határolót kell eldöntenünk, ebben az esetben sablont használunk.

A harmadik utat ajánlom, és ez a Word mélyebb ismeretére épít. A mezőket helyőrzőként fogjuk használni, PHP kóddal pedig közvetlenül frissítjük a mezőkben lévő értékeket a megfelelő értékekkel.

Ez a megközelítés rugalmas, gyors és összhangban van a Word bevált gyakorlataival. Ezenkívül elkerüli a teljes szöveges keresést a dokumentumban, ami jót tesz a teljesítménynek. Vegye figyelembe, hogy ennek a megoldásnak vannak hátrányai is.

A Word kezdettől fogva nem támogatta a mezők elnevezett indexeit. Még ha megadtuk is a létrehozandó mezők nevét, akkor is használnunk kell ezeknek a mezőknek a numerikus azonosítóit. Ez azt is megmagyarázza, hogy miért kell külön függvényt (setupfields) használnunk ahhoz, hogy a mezőindexet leképezzük a mező nevére az űrlapon.

Ebben a bemutató bemutatóban egy 5 MERGEFIELD mezőt tartalmazó dokumentumot fogunk használni. A sablondokumentumot ugyanoda fogjuk elhelyezni, ahol a szkriptkezelőnk.

Felhívjuk figyelmét, hogy a nyomtatási dátum mezőnek nincs megfelelő mezője az űrlapon. Ezért adtunk hozzá egy üres printdate elemet a $ bemeneti tömbhöz. E nélkül a szkript továbbra is futni fog, de a PHP figyelmeztetést ad ki, hogy a printdate index nem található a $ bemeneti tömbben.

A mezők új értékekkel történő cseréje után a dokumentumot a segítségével nyomtatjuk ki

$ d-> Nyomtatás ();

A PrintOut metódus több opcionális paramétert igényel, és mi a legegyszerűbb formáját fogjuk használni. Ezzel kinyomtatja a dokumentum egy példányát a Windows géphez csatlakoztatott alapértelmezett nyomtatón.

Meghívhatja a PrintPreview-t is, hogy megnézze az eredményt a nyomtatás előtt. Teljesen automatizált környezetben természetesen a PrintOut módszert fogjuk használni.

Várnia kell egy kicsit, mielőtt kilép a Wordből, mivel időbe telik a nyomtatási feladatok sorba állítása. Késleltetés nélkül (3) a $ w-> Quit metódus azonnal végrehajtódik, és a job nem kerül sorba.

Végül meghívjuk a $ w-> Quit (false) parancsot, amely bezárja a szkriptünk által meghívott Word alkalmazást. A metódusnak átadott egyetlen paraméter az, hogy a kilépés előtt el kell menteni a fájlt. Módosítottuk a dokumentumot, de nem akarjuk elmenteni őket, mert szükségünk van egy tiszta sablonra a későbbi munkához.

Miután elkészültünk a kóddal, betölthetjük űrlapoldalunkat, megadhatunk néhány értéket, és elküldhetjük azt. Az alábbi képek a szkript kimenetét, valamint a frissített Word dokumentumot mutatják:

A feldolgozási sebesség javítása és egy kicsit a PIA-ról

A PHP egy gyengén tipizált nyelv. Object típusú COM objektum. A szkript írásakor nincs módunk az objektum leírására, legyen az Word alkalmazás, dokumentum vagy mező. Nem tudjuk, hogy ez az objektum milyen tulajdonságokkal rendelkezik, és milyen metódusokat támogat.

Ez nagymértékben lassítja a fejlesztési sebességet. A fejlesztés felgyorsítása érdekében azt javaslom, hogy először írjon függvényeket C #-ben, majd fordítsa le a kódot PHP-be. C # fejlesztéshez tudok ajánlani egy ingyenes IDE-t, melynek neve “#develop”. Megtalálhatod. Inkább a Visual Studio helyett, mert a #develop kisebb, egyszerűbb és gyorsabb.

A C # kód PHP-be költöztetése nem olyan ijesztő, mint amilyennek hangzik. Hadd mutassak meg néhány sort a C #-ben:

Word.Application w = új Word.Application (); w.Látható = igaz; String elérési út = Application.StartupPath + "\\ template.docx"; Word.Document d = w.Documents.Open (útvonal) Word.Document néven; Word.Fields flds = d.Mezők; int len ​​= flds.Count; foreach (Word.Field f in flds) (f.Select (); int i = f.Index; w.Selection.TypeText ("...");)

Észre fogja venni, hogy a C # kód nagyon hasonló a korábban bemutatott PHP kódhoz. A C # egy erősen gépelt nyelv, ezért ebben a példában számos casting operátort fog látni, és a változókat be kell gépelni.

A változó típusának megadásával tisztább kódot és automatikus kiegészítést élvezhet, a fejlesztési sebesség pedig jelentősen megnő.

A PHP fejlesztés felgyorsításának másik módja egy makró meghívása a Wordben. Ugyanezt a műveletsort hajtjuk végre, majd elmentjük makróként. A makró Visual Basicben íródott, ami szintén könnyen lefordítható PHP-re.

És ami a legfontosabb, a Microsoft Office PIA-dokumentációja, különösen az egyes Office-alkalmazások névtér-dokumentációja a legrészletesebb referenciaanyag. A három leggyakrabban használt alkalmazás a következő:

  • 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

Következtetés

Ebben a cikkben megmutattuk, hogyan tölthet fel egy Word-dokumentumot adatokkal a PHP COM-könyvtárak és a Microsoft Office együttműködési képessége segítségével.

A Windows és az Office széles körben használatos a mindennapi életben. Az Office / Window és a PHP erejének ismerete minden PHP és Windows fejlesztő számára hasznos lesz.

A PHP COM kiterjesztés megnyitja az ajtót a kombináció használatához.

Folytatjuk a korábban elkezdett Word űrlapokkal való munka témáját. A korábbi cikkekben az űrlapokat csak a „haladó felhasználó” szemszögéből néztük, pl. olyan dokumentumokat hoztunk létre, amelyeket könnyű manuálisan kitölteni. Ma azt szeretném javasolni, hogy bővítsük ki ezt a feladatot, és próbáljuk meg a tartalomvezérlő mechanizmust használni dokumentumok generálására.

Mielőtt rátérnénk közvetlen feladatunkra, szeretnék néhány szót szólni arról, hogy a tartalomvezérlők adatai hogyan tárolódnak a Word dokumentumokban (egyelőre szándékosan kihagyom, hogy ezek hogyan kapcsolódnak a dokumentum tartalmához, de remélem visszatérek erre valamikor a következő cikkekben).

Természetes kérdés – mi az itemProps1.xmlés hasonló alkatrészek? Ezek az összetevők az adatforrások leírását tárolják. Valószínűleg a fejlesztők tervei szerint a dokumentumba ágyazott xml-ek mellett másokat is használni kellett volna, de eddig csak ez a módszer valósult meg.

Amik hasznosak számunkra itemPropsX.xml? Az a tény, hogy felsorolják az xml-sémákat (az ő targetNamespace), amelyek a szülőben használatosak itemX.xml... Ez azt jelenti, hogy ha egynél több egyéni xml-t csatlakoztattunk a dokumentumhoz, akkor ahhoz, hogy megtaláljuk a szükségeset, át kell mennünk itemPropsX.xml alkatrészeket, és megtalálja a kívánt áramkört, és ezáltal a kívánt itemX.xml.

Most még egy dolog. Nem elemezzük manuálisan a komponensek közötti kapcsolatokat, és csak az alap Packaging API segítségével keressük meg a szükségeseket! Ehelyett az Open XML SDK-t használjuk (az összeállításai a NuGet-en keresztül érhetők el). Természetesen korábban egy szót sem ejtettünk erről az API-ról, de a mi feladatunkhoz egy minimum kell belőle, és az összes kód elég átlátható lesz.

Nos, az alap bevezetés kész, kezdhetjük egy példával.

A hagyomány szerint ugyanazt a „Találkozási Jelentést” vesszük, amelyet a cikkben rajzoltunk. Hadd emlékeztesselek arra, hogy így nézett ki a dokumentumsablon:

És így, az XML, amelyhez a dokumentummezők kötve voltak

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

1. lépés Adatmodell létrehozása

Valójában nem csak egy dokumentum generálása a feladatunk, hanem egy kényelmes eszköz létrehozása (legalábbis vázlatos változatban), amelyet mind a fejlesztő, mind a felhasználó használhat.

Ezért a modellt C # osztályok szerkezeteként deklaráljuk:

Nyilvános osztály MeetingNotes (nyilvános MeetingNotes () (résztvevők = új lista (); Döntések = új lista (); ) public string Tárgy (get; set;) public DateTime Dátum (get; set;) public string Titkár (get; set;) public List Résztvevők (get; set;) nyilvános lista határozatok (get; set;)) public class Döntés (public string Probléma (get; set;) public string Megoldás (get; set;) public string Responsible (get; set;) public DateTime ControlDate (get; set;)) public osztály Résztvevő (nyilvános karakterlánc Név (get; set;))

Nagyjából semmi különös, kivéve az XML szerializálást vezérlő attribútumok hozzáadását (mivel a modellben szereplő nevek és a szükséges XML kissé eltérnek).

2. lépés: Sorolja fel a fenti modellt XML-re

A feladat elvileg triviális. Amit úgy hívnak, hogy „vegyük a kedvenc XmlSerializerünket és menjünk”, ha nem egy de

Sajnos úgy tűnik, hogy az Office jelenlegi verziójában van egy hiba, ami a következő: ha az egyéni xml elülső deklarálva a fő névteret (azt, ahonnan a Word elemeket kell venni a megjelenítéshez), deklarál egy másikat, majd az ismétlődő tartalomvezérlők hibásan kezdenek megjelenni (csak annyi elem jelenik meg, amennyi magában a sablonban volt - vagyis a szakasz ismétlése nem működik ).

Azok. ez az xml működik:

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

és ezt is:

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

de ez már nem:

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

Megpróbáltam hibát beküldeni a Microsoft támogatásának a Connecten, de valamilyen oknál fogva nem férek hozzá a hibák beküldéséhez az Office-on keresztül. És az MSDN fórumon folyó vita sem segített.

Általában szükséges körforgalmi manőver. Ha kézzel alakítanánk ki az XML-t, akkor nem lenne probléma – mindent magunk csináltunk volna. Ebben az esetben azonban valóban a szabványos XmlSerializer-t szeretném használni, amely alapértelmezés szerint több névterét hozzáadja a kimeneti XML-hez, még akkor is, ha ezeket a névtereket nem használja.

Teljesen letiltjuk a saját névtereink kimenetét az XmlSerializerben. Igaz, ez a megközelítés csak akkor működik, ha valóban nincs rájuk szüksége (ellenkező esetben továbbra is hozzáadásra kerülnek, és csak a miénk ELŐTT).

Valójában a teljes kód (feltéve, hogy a változó meetingJegyzetek tartalmaz egy korábban feltöltött MeetingNotes objektumot):

var serializer = new XmlSerializer (typeof (MeetingNotes));
var serializedDataStream = new MemoryStream ();

var namespaces = new XmlSerializerNamespaces ();
névterek.Hozzáadás ("", "");

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

3. lépés: Írja be a kapott XML-t egy Word dokumentumba.

Itt a következőket tesszük:

  • másolja ki a sablont, és nyissa meg a másolatot
  • keresse meg benne a szükséges egyéni xml-t (keresés névtér szerint "Urn: Találkozói feljegyzések")
  • cserélje ki a komponens tartalmát az XML-ünkre

File.Copy (templateName, resultDocumentName, true); using (var document = WordprocessingDocument.Open (resultDocumentName, true)) (var xmlpart = document.MainDocumentPart.CustomXmlParts .Single (xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.OfTReferencyes) () .Any (sr => sr.Uri.Value == "(! LANG: urn: MeetingNotes"!}

A "Dokumentumok kitöltésének automatizálása" sorozat korábbi cikkeiben arról beszéltem, hogyan lehet létrehozni az alkalmazás felhasználói felületét, megszervezni a bemeneti adatok érvényesítését és a számokat szavakban lekérni VBA kód használata nélkül. Ebben az utolsó cikkben a varázslatról fogunk beszélni - az összes szükséges érték átvitele egy Excel-munkafüzetből egy Word dokumentumba. Hadd mutassam meg, mi legyen az eredmény:

Mechanizmus leírása

Először általánosságban leírom, hogyan kerülnek át az adatok egy Word dokumentumba. Először is szükségünk van egy Word dokumentumsablonra, amely tartalmazza az összes jelölést, táblázatokat és a szövegnek azt a részét, amely változatlan marad. Ebben a sablonban meg kell határoznia azokat a helyeket, ahol az Excel-munkafüzet értékei helyettesítésre kerülnek - ennek legkényelmesebb módja a könyvjelzők használata. Ezt követően úgy kell rendszerezni az Excel adatokat, hogy illeszkedjenek a Word sablonhoz, és nem utolsósorban magát az átviteli eljárást is meg kell írni VBA-ba.

Tehát először a dolgok.

Hozzon létre egy Word dokumentumsablont

Itt minden rendkívül egyszerű - rendes dokumentumot készítünk, gépeljük és formázzuk a szöveget, általában arra törekszünk, hogy megkapjuk a szükséges űrlapot. Azokon a helyeken, ahol szükség lesz az értékek helyettesítésére az Excelből, könyvjelzőket kell létrehoznia. Ez a következőképpen történik:

Így létre kell hoznia az összes könyvjelzőt, azaz meg kell jelölnie az összes helyet, ahová az Excelből származó adatokat beilleszti. Az így kapott fájlt "MS Word Template" néven kell elmenteni a "Fájl" -> "Mentés másként..." menüpont segítségével.

Excel adatok előkészítése

A kényelem kedvéért úgy döntöttem, hogy minden adatot, amelyet át kell vinni a Word dokumentumba, egy külön munkalapon helyezem el, amelyet Könyvjelzők - könyvjelzők néven írnak le. Ennek a lapnak két oszlopa van: az első a könyvjelzők neveit tartalmazza (pontosan úgy, ahogy a Word dokumentumban el vannak nevezve), a második pedig a megfelelő becsomagolandó értékeket tartalmazza.

Ezen értékek egy része közvetlenül az adatbeviteli lapról, néhány pedig a Támogatási lapon található segédtáblázatokból származik. Ebben a cikkben nem elemzem a szükséges értékeket kiszámító képleteket, ha valami nem világos - tegyen fel kérdéseket a megjegyzésekben.

Ebben a szakaszban fontos a könyvjelzők összes nevét helyesen feltüntetni - az adatátvitel helyessége ettől függ.

Áthelyezési eljárás

De ez a legérdekesebb. Két lehetőség van az adatátviteli kód végrehajtására:

  • A kód egy Excel-munkafüzetben fut le, az adatokat egyenként adjuk át a Word-nek, és azonnal elhelyezzük a dokumentumban.
  • A kód végrehajtása külön Word dokumentumban történik, az Excelből minden adat egy kötegben kerül átvitelre.

A végrehajtás sebessége szempontjából, különösen sok könyvjelzővel, a második lehetőség sokkal vonzóbbnak tűnik, de összetettebb műveleteket igényel. Ezt használtam.

A következőket kell tennie:

  • Hozzon létre egy makró-kompatibilis Word dokumentumsablont. Ez a sablon végrehajtható VBA kódot fog tartalmazni.
  • A létrehozott sablonban egy VBA-ban írt programot kell elhelyezni. Ehhez sablon szerkesztésekor nyomjuk meg az Alt + F11 billentyűkombinációt és írjuk be a program kódját a megnyíló Visual Basic szerkesztő ablakba.
  • Írjon egy Excel-munkafüzetbe olyan kódot, amely meghívja a kitöltési eljárást az újonnan létrehozott Word-sablonból.

Az eljárás szövegét a cikkben nem adom meg - az könnyen megtekinthető a példával ellátott archívum Template mappájában található FillDocument.dotm fájlban.

Hogyan használhatja mindezt az adott problémája megoldására?

Megértem, hogy szavakkal minden nagyon egyszerűnek tűnik, de mi történik a gyakorlatban? Azt javaslom, hogy csak egy kész opciót használjon. Töltse le az archívumot a példával, egy Excel-munkafüzetben nyomja meg az Alt + F11 billentyűkombinációt a Visual Basic szerkesztő megnyitásához, és olvassa el az összes megjegyzésemet a programmal kapcsolatban. Ahhoz, hogy a programot az Ön igényeinek megfelelően módosítsa, csak néhány állandó értékét kell megváltoztatnia, ezek a program legelején kerülnek elhelyezésre. A teljes programszöveget szabadon bemásolhatja a projektbe.

Az archívum szerkezete

A cikkhez csatolt archívum több fájlt is tartalmaz.

A fő fájl egy Excel-munkafüzet, melynek neve "Megerősítések létrehozása". Ebben a munkafüzetben 4 munkalap található, amelyek közül csak kettő jelenik meg: "Input" - adatbeviteli lap és "Adatbázis" - az összes bevitt dokumentum archívuma.

A Sablonok mappa Word dokumentumsablonokat tartalmaz. Az egyik egy könyvjelző-kitöltő programot tartalmazó sablon, a másik pedig egy kitöltendő űrlap. A sablont változtatás nélkül használhatja a programmal, de a kitöltéshez szükséges űrlapot természetesen az Ön igényeinek megfelelően újra kell készíteni.

Hogyan dolgozzuk át a példát „magadnak”?

  1. Készítsen Word dokumentumsablont, amelyet ki kell töltenie. Hozzon létre benne minden szükséges könyvjelzőt, és mentse el "MS Word sablonként".
  2. Másolja a FillDocument.dotm fájlt a cikkhez csatolt archívumból az előkészített sablont tartalmazó mappába. Ez a fájl felelős a sablon könyvjelzőinek kitöltéséért, és nem kell rajta változtatni semmit.
  3. Készítsen Excel-munkafüzetet az adatbevitelhez. Ön dönti el, hogy lesz-e „fejlett” felhasználói felülete, és végezzen különféle okos számításokat. A lényeg az, hogy egy munkalapot tartalmazzon a Word sablonban lévő könyvjelző neve és a helyettesítendő érték közötti megfelelési táblázattal.
  4. Illessze be a VBA programkódot a mintafájlból az előkészített munkafüzetbe. Cserélje ki az összes állandót a projektnek megfelelően.
  5. Tesztelje a munka helyességét.
  6. Használd aktívan!

A, vezetéknevek az oszlopban Bés szakmák a rovatban C.

2. Hozzon létre egy Word dokumentumot (.doc vagy.docx)


(A), (B)és (C).

(A), (B)és (C) (A)- név, (B)- vezetéknév, (C)- szakma.

Beállítások programokat.

3. Válassza ki a fájlok és mappák elérési útját


Válassza ki

4. Állítsa be a kívánt adatok lapjait és sorait


Excel fájl adatlapok

Excel fájl adatsorai Excel fájl adatlapok

1 .

Ha azt szeretné, hogy az excel fájl összes adatlapot tartalmazó lapja és/vagy sora részt vegyen a dokumentum kialakításában, kattintson a jobb gombbal egy felirattal Számok(ebben az esetben a felirata erre módosul Minden).

5. Állítsa be az új Word fájlok nevének sablonját


Állítsa be az új szófájlok nevének sablonját:

Új szó fájlnevek sablonja egy sablon a program által generált új dokumentumok (word fájlok) nevéhez. Itt a névsablon az excel fájl oszlopneveit tartalmazza, kapcsos zárójelekkel körülvéve: (A)és (B)... Új dokumentum generálásakor a program az összeset lecseréli (A)és (B) a megfelelő cellaértékek az Excel fájlból - ez lesz az új dokumentum (word fájl) neve.

A keretező szimbólumokat a lapon állíthatja be Beállítások programokat.

6. Kattintson a "Létrehozás" gombra.


Kattintson a gombra generálés a folyamat megjelenik a képernyőn. Pontosan annyi dokumentum (word-fájlok) jön létre, ahány sor az excel fájlból részt vesz a kialakításban.

7. Mindent


Minden dokumentum (word fájl) létrejön, és a megadott mappában található Mappa az új szófájlok mentéséhez... Minden:)

Exwog - jelentésgenerátor Excelből Wordbe sablon szerint

Word fájlok ingyenes generátora sablonból (Word fájl) Excel fájl adatok alapján

Működik Mac OS, Windows és Linux rendszeren

Lehetővé teszi az új generált szófájlok nevének megadását

Lehetővé teszi a kívánt adatok lapjainak és sorainak meghatározását

Lehetővé teszi bezáró karakterek beállítását az Excel oszlopnevekhez

Könnyen kezelhető

Tárolja adatait Excel formátumban (.xls és .xlsx), és néhány kattintással készítsen Word fájlokat (.doc és .docx) :)


Hogyan működik?

Vessen egy pillantást az excel fájljára


Ebben a példában az Excel fájl ügyféladatokat tartalmaz. Minden sor egy adott ügyfélnek felel meg. A nevek az oszlopban találhatók A, vezetéknevek az oszlopban Bés szakmák a rovatban C.

Kattintson a megtekintéséhez

Word dokumentum létrehozása (.doc vagy.docx)


Kattintson a megtekintéséhez

Hozzon létre egy "sablont" (word-fájlt) új dokumentumok (word-fájlok) generálásához. Itt a "sablon" szöveg az excel fájl oszlopneveit tartalmazza, kapcsos zárójelekkel körülvéve: (A), (B)és (C).

A program az összeset helyettesítő "sablon" szerint generál új dokumentumokat (A), (B)és (C) a megfelelő cellaértékek az Excel fájlból: (A)- név, (B)- vezetéknév, (C)- szakma.

A lapon saját keretezési szimbólumokat is beállíthat Beállítások programokat.

Válassza ki a fájlok és mappák elérési útját


Válassza ki a fájlok és mappák elérési útját (a feliratú gombok Válassza ki). A programban a következő útvonalakat állíthatja be:

Excel-fájl adatokkal (* .xls, * .xlsx)- ez az Excel adatfájlod elérési útja (ügyfélinformáció);

Word sablonfájl (* .doc, * .docx)- ez a "sablonod" elérési útja (az előző lépésben létrehozott szófájl);

Mappa az új szófájlok mentéséhez- ez annak a mappának az elérési útja, ahová a program elmenti az új generált dokumentumokat.

Kattintson a megtekintéséhez

Állítsa be a kívánt adatok lapjait és sorait


Kattintson a megtekintéséhez

Állítsa be az adatokkal (ügyfélinformációkkal) rendelkező Excel fájl lapjainak és sorainak számát, amelyekhez dokumentumokat szeretne generálni:

Excel fájl adatlapok- az Excel fájl azon lapjainak száma, amelyek részt vesznek az új dokumentumok kialakításában;

Excel fájl adatsorai- a lapok sorszámai (a lapokban meghatározott lapok Excel fájl adatlapok) az Excel fájlból, amely részt vesz az új dokumentumok létrehozásában. Minden megadott sor adatai alapján külön dokumentum (word fájl) jön létre.

A lapok és sorok számozása a programban ezzel kezdődik 1 .