Kā ģenerēt dokumentus Word. Exwog - atskaišu ģenerators no Excel uz Word pēc veidnes

Mēs dzīvojam pasaulē, kurā PHP izstrādātājiem laiku pa laikam ir jāsazinās ar Windows operētājsistēmu. WMI (Windows Management Interface, Windows Management Interface) - viens no šādiem piemēriem ir mijiedarbība ar Microsoft Office.

Šajā rakstā mēs apskatīsim vienkāršu integrāciju starp Word un PHP: Microsoft Word dokumenta ģenerēšana, pamatojoties uz ievades laukiem HTML formā, izmantojot PHP (un tā Interop paplašinājumu).

Sagatavošanas soļi

Pirmkārt, pārliecināsimies, ka mums ir iestatīta pamata WAMP vide. Tā kā Interop ir pieejams tikai operētājsistēmā Windows, mums ir nepieciešams mūsu Apache serveris un PHP instalācija, kas jāizvieto Windows datorā. Es izmantoju EasyPHP 14.1, kuru ir ļoti viegli instalēt un iestatīt.

Nākamais solis ir instalēt Microsoft Office. Versija nav īpaši svarīga. Es izmantoju Microsoft Office 2013 Pro, taču vajadzētu darboties jebkurai Office versijai, kas vecāka par 2007. gadu.

Mums arī jāpārliecinās, ka esam instalējuši bibliotēkas Interop lietojumprogrammas izstrādei (PIA, Primary Interop Assemblies, Primary Interop Assemblies). To var uzzināt, atverot Windows Explorer un dodoties uz direktoriju \assembly , un tur mums vajadzētu redzēt instalēto mezglu kopu:

Šeit jūs varat redzēt Microsoft.Office.Interop.Word elementu (ekrānuzņēmumā pasvītrots). Šī būs versija, ko izmantosim savā demonstrācijā. Lūdzu, pievērsiet īpašu uzmanību laukiem "Asamblejas nosaukums", "Versija" un "Publiskās atslēgas marķieris". Drīzumā mēs tos izmantosim savā PHP skriptā.

Šajā direktorijā ir arī citi komplekti (tostarp visa Office saime), kas ir pieejami lietošanai to programmās (ne tikai PHP, bet arī VB.net, C# utt.).

Ja komplektu sarakstā nav iekļauta visa Microsoft.Office.Interop pakotne, mums ir vai nu atkārtoti jāinstalē Office, pievienojot PIA, vai manuāli jālejupielādē pakotne no Microsoft vietnes un jāinstalē. Detalizētākus norādījumus skatiet šajā MSDN lapā.

komentēt Piezīme. Lejupielādei un instalēšanai ir pieejams tikai Microsoft Office 2010 PIA izplatīšana. Šajā pakotnē iekļautā montāžas versija ir 14.0.0, un versija 15 ir pieejama tikai ar Office 2013.

Visbeidzot, failā php.ini ir jāiespējo php_com_dotnet.dll paplašinājums un jārestartē serveris.

Tagad mēs varam pāriet uz programmēšanu.

HTML forma

Tā kā šī piemēra galvenā daļa ir servera pusē, mēs izveidosim vienkāršu lapu ar veidlapu, kas izskatīsies šādi:

Mums ir teksta lauks vārdam, radio pogu grupa dzimumam, slīdnis vecumam un teksta ievades apgabals ziņojuma ievadīšanai, kā arī bēdīgi slavenā poga “Iesniegt”.

Saglabājiet šo failu kā "index.html" virtuālā saimniekdatora direktorijā, lai tam varētu piekļūt, izmantojot vietrādi URL, piemēram, http://test/test/interop .

Servera daļa

Apdarinātāja fails servera pusē ir mūsu sarunas galvenais mērķis. Vispirms es došu pilnu šī faila kodu, un pēc tam es to paskaidrošu soli pa solim.

redzams = patiess; $fn = __DIR__ . "\\template.docx"; $d = $w->Dokumenti->Atvērt($fn); atbalss "Dokuments ir atvērts.


"; $flds = $d->Fields; $count = $flds->Count; echo "Dokumentā ir $skaita lauki.
"; atbalss"
    "; $mapping = setupfields(); foreach ($flds kā $indekss => $f) ( $f-> Select(); $key = $mapping[$index]; $value = $inputs[$key]; if ($key == "dzimums") ( if ($value == "(!LANG:m") $value = "Mr."; else $value = "Jaunkundze."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • $index: $key piešķiršana $vērtībai
  • "; ) atbalss"
"; echo "Apstrāde pabeigta!

"; echo "Notiek drukāšana, lūdzu, uzgaidiet...
"; $d->PrintOut(); miega(3); atbalss "Gatavs!"; $w->Quit(false); $w=null; funkciju iestatīšanas lauki() ( $mapping = array(); $mapping = "gender"; $mapping = "name"; $mapping = "vecums"; $mapping = "msg"; $mapping = "printdate"; atgriezties $mapping; )

Pēc tam, kad esam ierakstījuši no formas saņemtās vērtības mainīgajā $ inputs, kā arī izveidojuši tukšu elementu ar printdate taustiņu (kāpēc mēs to izdarījām - mēs to apspriedīsim vēlāk), mēs pārejam pie četrām ļoti svarīgām rindām:

$assembly = "Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neitrāls, PublicKeyToken=71e9bce111e9429c"; $class = "Microsoft.Office.Interop.Word.ApplicationClass"; $w = new DOTNET($montāža, $klase); $w->redzams = patiess;

PHP COM manipulators pieprasa, lai klase būtu instantiēta "montāžas" ietvaros. Mūsu gadījumā mēs strādājam ar Word. Ja skatāties uz pirmo ekrānuzņēmumu, varat pierakstīt visu Word montāžas parakstu:

  • "Nosaukums", "Versija", "Publiskās atslēgas marķieris" ir ņemti no informācijas, ko var skatīt mapē "c:\Windows\assembly".
  • "Kultūra" vienmēr ir neitrāla

Klase, uz kuru mēs vēlamies atsaukties, vienmēr tiek nosaukta “montāžas nosaukums” + “.ApplicationClass”.

Iestatot šos divus parametrus, mēs varam iegūt objektu darbam ar Word.

Šis objekts var palikt fonā, vai arī mēs varam to ieviest ražošanā, iestatot redzamo atribūtu uz true .

Nākamais solis ir atvērt apstrādājamo dokumentu un mainīgajam $d ierakstīt “dokumenta” gadījumu.

Ir vairāki veidi, kā dokumentā izveidot uz veidlapu balstītu saturu.

Sliktākais būtu dokumenta satura kodēšana PHP un pēc tam izvadīt to Word dokumentā. Es stingri iesaku to nedarīt šādu iemeslu dēļ:

  1. Jūs zaudējat elastību. Jebkuras izmaiņas izvades failā prasīs izmaiņas PHP kodā.
  2. Tas pārtrauc vadības un skata atdalīšanu
  3. Stilu pielietošana dokumenta saturam (līdzinājums, fonti, stili utt.) skriptā ievērojami palielinās koda rindu skaitu. Programmatiski mainīt stilus ir pārāk apgrūtinoši.

Vēl viena iespēja būtu izmantot atrašanu un aizstāšanu. Šim nolūkam PHP ir labi iebūvēti rīki. Varam izveidot Word dokumentu, kurā ievietojam etiķetes ar speciāliem atdalītājiem, kas vēlāk tiks aizstāti. Piemēram, mēs varam izveidot dokumentu, kurā būs šāds fragments:

un ar PHP palīdzību to viegli varam aizstāt ar no formas saņemto lauka “Nosaukums” saturu.

Tas ir vienkārši un pasargā mūs no visām nepatīkamajām sekām, ar kurām saskaramies, izmantojot pirmo metodi. Mums vienkārši jāizlemj par pareizo norobežotāju, un tādā gadījumā mēs izmantojam veidni.

Es iesaku trešo metodi, un tās pamatā ir dziļākas zināšanas par Word. Mēs izmantosim laukus kā vietturus, un, izmantojot PHP kodu, mēs tieši atjaunināsim lauku vērtības ar atbilstošajām vērtībām.

Šī pieeja ir elastīga, ātra un atbilst Word paraugpraksei. Izmantojot to, jūs varat arī izvairīties no pilna teksta meklēšanas dokumentā, kas labi ietekmē veiktspēju. Ņemiet vērā, ka šim risinājumam ir arī trūkumi.

Word no paša sākuma neatbalstīja nosauktos indeksus laukiem. Pat ja izveidotajiem laukiem esam norādījuši nosaukumus, mums joprojām ir jāizmanto šo lauku ciparu identifikatori. Tas arī izskaidro, kāpēc mums ir jāizmanto atsevišķa funkcija (iestatīšanas lauki), lai saskaņotu lauka indeksu un lauka nosaukumu no veidlapas.

Šajā demonstrācijā mēs izmantosim dokumentu ar 5 MERGEFIELD laukiem. Mēs ievietosim veidnes dokumentu tajā pašā vietā, kur mūsu skriptu apstrādātājs.

Lūdzu, ņemiet vērā, ka laukam printdate nav atbilstoša lauka veidlapā. Tāpēc masīvam $inputs pievienojām tukšu printdate elementu. Bez tā skripts joprojām darbosies un darbosies, bet PHP izdos brīdinājumu, ka $ inputs masīvā trūkst printdate indeksa.

Pēc lauku aizstāšanas ar jaunām vērtībām mēs izdrukājam dokumentu ar

$d->PrintOut();

Izdrukas metodei ir nepieciešami daži izvēles parametri, un mēs izmantojam tās vienkāršāko formu. Tādējādi tiks izdrukāta viena dokumenta kopija noklusējuma printerī, kas pievienots Windows iekārtai.

Varat arī piezvanīt uz PrintPreview, lai pirms drukāšanas apskatītu rezultātu. Pilnībā automātiskā vidē mēs, protams, izmantosim PrintOut metodi.

Pirms iziešanas no lietojumprogrammas Word nedaudz uzgaidiet, jo ir nepieciešams laiks, līdz drukas darbs tiek ievietots rindā. Bez kavēšanās (3) metode $w->Quit tiek izpildīta nekavējoties un darbs netiek ievietots rindā.

Visbeidzot, mēs izsaucam $w->Quit(false) , kas aizver Word lietojumprogrammu, kuru izsauca mūsu skripts. Vienīgais parametrs, kas tiek nodots metodei, ir faila saglabāšana pirms iziešanas. Mēs esam veikuši dokumenta labojumus, taču nevēlamies tos saglabāt, jo mums ir nepieciešama tīra veidne vēlākam darbam.

Kad esam pabeiguši ar kodu, mēs varam ielādēt mūsu veidlapas lapu, aizpildīt dažas vērtības un iesniegt to. Tālāk esošie attēli parāda skripta izvadi, kā arī atjaunināto Word dokumentu:

Uzlabots apstrādes ātrums un nedaudz vairāk par PIA

PHP ir brīvi rakstīta valoda. COM objekts tipa Object . Rakstot skriptu, mums nav iespējas iegūt objekta aprakstu neatkarīgi no tā, vai tā ir Word lietojumprogramma, dokuments vai lauks. Mēs nezinām, kādas īpašības ir šim objektam vai kādas metodes tas atbalsta.

Tas ievērojami palēninās attīstības ātrumu. Lai paātrinātu attīstību, es ieteiktu vispirms rakstīt funkcijas C# un pēc tam tulkot kodu PHP. Es varu ieteikt bezmaksas IDE C# izstrādei ar nosaukumu “#develop”. Jūs varat viņu atrast. Es dodu priekšroku tam, nevis Visual Studio, jo #develop ir mazāks, vienkāršāks un ātrāks.

C# koda migrēšana uz PHP nav tik biedējoša, kā šķiet. Ļaujiet man parādīt dažas rindiņas C#:

Word.Application w=new Word.Application(); w.Visible=true; String path=Application.StartupPath+"\\template.docx"; Word.Document d=w.Documents.Open(path) as Word.Document; Word.Fields flds=d.Fields; intlen=flds.Count; foreach (Word.Field f in flds) (f.Select(); int i=f.Index; w.Selection.TypeText("..."); )

Var redzēt, ka C# kods ir ļoti līdzīgs PHP kodam, ko es parādīju iepriekš. C# ir stingri drukāta valoda, tāpēc šajā piemērā var redzēt vairākus apraides operatorus, kā arī jānorāda mainīgo veids.

Norādot mainīgā veidu, jūs varat baudīt skaidrāku kodu un automātisko pabeigšanu, kā arī ievērojami palielinās izstrādes ātrums.

Vēl viens veids, kā paātrināt PHP izstrādi, ir makro izsaukšana programmā Word. Mēs veicam to pašu darbību secību un pēc tam saglabājam to kā makro. Makro ir rakstīts programmā Visual Basic, ko arī ir viegli pārtulkot PHP.

Un, pats galvenais, Microsoft Office PIA dokumentācija, īpaši katras Office lietojumprogrammas nosaukumvietas dokumentācija, ir visdetalizētākā atsauce. Visbiežāk izmantotās trīs lietojumprogrammas ir:

  • 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

Secinājums

Šajā rakstā mēs parādījām, kā Word dokumentu aizpildīt ar datiem, izmantojot PHP COM bibliotēkas un Microsoft Office savietojamību.

Windows un Office tiek plaši izmantoti ikdienas dzīvē. Office/Window un PHP jaudas pārzināšana noderēs ikvienam PHP un Windows izstrādātājam.

PHP COM paplašinājums paver jums iespēju izmantot šo kombināciju.

Mēs turpinām iepriekš aizsākto tēmu par darbu ar formām programmā Word. Iepriekšējos rakstos veidlapas aplūkojām tikai no “spēcīgā lietotāja” perspektīvas, t.i. izveidojām dokumentus, kas ir ērti manuālai aizpildīšanai. Šodien es vēlos ierosināt paplašināt šo uzdevumu un mēģināt izmantot satura kontroles mehānismu dokumentu ģenerēšanai.

Pirms mēs ķeramies pie mūsu tūlītējā uzdevuma, es vēlos teikt dažus vārdus par to, kā Word dokumentos tiek saglabāti dati satura vadīklām (pagaidām apzināti izlaidīšu, kā tie ir saistīti ar dokumenta saturu, bet es ceru atgriezties uz to dažkārt nākamajos rakstos).

Leģitīms jautājums ir, kas ir itemProps1.xml un līdzīgas sastāvdaļas? Šie komponenti glabā datu avotu aprakstus. Visticamāk, kā izdomājuši izstrādātāji, papildus dokumentā iegultajiem xml failiem bija paredzēts izmantot arī citus, taču līdz šim ir ieviesta tikai šī metode.

Kas mums ir noderīgs itemPropsX.xml? Fakts, ka viņi uzskaita xml shēmas (viņu mērķaNamespace), kas tiek izmantoti vecākam itemX.xml. Tas nozīmē, ka, ja dokumentā esam iekļāvuši vairāk nekā vienu pielāgotu xml, tad, lai atrastu pareizo, mums ir jāiziet cauri itemPropsX.xml komponenti un atrodiet vajadzīgo ķēdi un līdz ar to vēlamo itemX.xml.

Tagad vēl mirklis. Mēs manuāli neanalizēsim attiecības starp komponentiem un nemeklēsim pareizās, izmantojot tikai pamata pakotnes API! Tā vietā mēs izmantosim Open XML SDK (tā versijas ir pieejamas, izmantojot NuGet). Protams, mēs ne vārda neteicām par šo API iepriekš, taču mūsu uzdevumam tas prasa minimumu, un viss kods būs diezgan caurspīdīgs.

Nu, galvenais ievads ir izdarīts, varat pāriet uz piemēru.

Saskaņā ar iedibināto tradīciju mēs ņemsim to pašu “Sapulces ziņojumu”, ko zīmējām rakstā. Atgādināšu, ka dokumenta veidne izskatījās šādi:

Un tā, XML, ar kuru tika saistīti dokumenta lauki

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

1. darbība. Izveidojiet datu modeli

Patiesībā mūsu uzdevums ir ne tikai ģenerēt dokumentu, bet gan izveidot (vismaz melnraksta versijā) ērtu rīku, ko varētu izmantot gan izstrādātājs, gan lietotājs.

Tāpēc mēs deklarēsim modeli kā C# klašu struktūru:

Publiskās klases sanāksmes piezīmes ( publiskas sanāksmes piezīmes () ( Dalībnieki = jauns saraksts (); Lēmumi = jauns saraksts (); ) public string Subject ( get; set; ) public DateTime Datums ( get; set; ) public string Secretary ( get; set; ) public List Dalībnieki ( get; set; ) publiskais saraksts Lēmumi ( get; set; ) ) publiskā klase Lēmums ( publiska virkne Problēma ( get; set; ) public string Solution ( get; set; ) public string Atbildīgais ( get; set; ) public DateTime ControlDate ( get; set; ) ) public klases dalībnieks ( publiskas virknes nosaukums ( get; set; ) )

Pa lielam nekas īpašs, izņemot to, ka ir pievienoti atribūti, kas kontrolē XML serializāciju (jo nosaukumi modelī un vajadzīgajā XML nedaudz atšķiras).

2. darbība. Serializējiet iepriekš minēto modeli uz XML

Uzdevums principā ir triviāls. Ko sauc par “paņem mūsu iecienītāko XmlSerializer un aiziet”, ja ne vienu bet

Diemžēl pašreizējā Office versijā acīmredzot ir kļūda, kas ir šāda: ja pielāgotajā xml priekšā deklarējot galveno nosaukumvietu (tā, no kuras Word ir jāņem elementi parādīšanai), deklarējiet vēl dažus, tad atkārtoti satura vadīklas sāk parādīties nepareizi (tiek parādīts tikai tik daudz elementu, cik bija pašā veidnē - ti, atkārtojot sadaļas darbs).

Tie. Šeit ir xml, kas darbojas:

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

un arī šis:

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

un šis ir pazudis:

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

Es mēģināju iesniegt kļūdu Microsoft atbalstam vietnē Connect , taču kaut kādu iemeslu dēļ man tika liegta piekļuve kļūdu iesniegšanai, izmantojot Office. Nelīdzēja arī diskusija MSDN forumā.

Kopumā nepieciešamais apvedceļa manevrs. Ja XML veidotu ar roku, tad problēmu nebūtu – visu darītu paši. Tomēr šajā gadījumā es patiešām vēlos izmantot standarta XmlSerializer, kas pēc noklusējuma pievieno vairākas savas nosaukumvietas izvades XML, pat ja šīs nosaukumvietas netiek izmantotas.

Mēs pilnībā bloķēsim mūsu pašu nosaukumvietu izvadi programmā XmlSerializer. Tiesa, šī pieeja darbosies tikai tad, ja viņam tās tiešām nebūs vajadzīgas (pretējā gadījumā tās tomēr tiks pievienotas un tieši PIRMS mūsējās).

Faktiski viss kods (ar nosacījumu, ka mainīgais sanāksmePiezīmes satur iepriekš aizpildītu objektu MeetingNotes):

var serializer = new XmlSerializer(tips (Sapulces piezīmes));
var serializedDataStream = new MemoryStream();

var namespaces = new XmlSerializerNamespaces();
namespaces.Add("" , "" );

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

Solis 3. Mēs ievadām iegūto XML Word dokumentā.

Šeit mēs veicam šādas darbības:

  • nokopējiet veidni un atveriet kopiju
  • atrodiet tajā vajadzīgo pielāgoto xml (meklējiet pēc nosaukumvietas "urna: sapulces piezīmes")
  • mēs aizstājam komponenta saturu ar mūsu XML

Fails.Kopija(veidnesNosaukums, rezultātaDokumenta nosaukums, true ); izmantojot (var document = WordprocessingDocument.Open(resultDocumentName, true )) ( var xmlpart = document.MainDocumentPart.CustomXmlParts .Single(xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.OfTReferences () .Any(sr => sr.Uri.Value == "(!LANG:urn:MeetingNotes"!}

Iepriekšējos rakstos sērijā "Dokumentu aizpildīšanas automatizācija" es runāju par to, kā izveidot lietojumprogrammas lietotāja interfeisu, organizēt ievades validāciju un iegūt skaitli vārdos, neizmantojot VBA kodu. Šajā pēdējā rakstā mēs runāsim par maģiju - visu nepieciešamo vērtību pārsūtīšanu no Excel darbgrāmatas uz Word dokumentu. Ļaujiet man parādīt gala rezultātu:

Mehānisma apraksts

Sākumā es vispārīgi aprakstīšu, kā dati tiks pārsūtīti uz Word dokumentu. Pirmkārt, mums ir nepieciešama Word dokumenta veidne, kurā ir visi marķējumi, tabulas un tā teksta daļa, kas paliks nemainīga. Šajā veidnē ir jādefinē vietas, kur tiks aizstātas Excel darbgrāmatas vērtības — ērtākais veids, kā to izdarīt, ir ar grāmatzīmju palīdzību. Pēc tam jums ir jāsakārto Excel dati tā, lai tie atbilstu Word veidnei, un visbeidzot, bet ne mazāk svarīgi, VBA ierakstiet pati pārsūtīšanas procedūra.

Tātad, vispirms vispirms.

Izveidojiet Word dokumenta veidni

Šeit viss ir ārkārtīgi vienkārši - mēs veidojam parastu dokumentu, ierakstām un formatējam tekstu, kopumā mēs panākam, lai iegūtu nepieciešamo formu. Tajās vietās, kur būs nepieciešams aizstāt vērtības no Excel, jums ir jāizveido grāmatzīmes. Tas tiek darīts šādā veidā:

Tādējādi jums būs jāizveido visas grāmatzīmes, tas ir, jāatzīmē visas vietas, kur tiks ievietoti dati no Excel. Iegūtais fails ir jāsaglabā kā "MS Word Template", izmantojot izvēlnes vienumu "Fails" -> "Saglabāt kā...".

Excel datu sagatavošana

Ērtības labad es nolēmu visus datus, kas jāpārsūta uz Word dokumentu, ievietot atsevišķā darblapā ar nosaukumu Grāmatzīmes - grāmatzīmes. Šajā lapā ir divas kolonnas: pirmajā ir grāmatzīmju nosaukumi (tieši tā, kā tie ir nosaukti Word dokumentā), bet otrajā ir atbilstošās pārsūtāmās vērtības.

Dažas no šīm vērtībām ir iegūtas tieši no datu ievades lapas, un dažas ir no palīgtabulām, kas atrodas atbalsta lapā. Šajā rakstā es neanalizēšu formulas, kas aprēķina vēlamās vērtības, ja kaut kas nav skaidrs, uzdodiet jautājumus komentāros.

Šajā posmā ir svarīgi pareizi norādīt visus grāmatzīmju nosaukumus - no tā ir atkarīga datu pārsūtīšanas pareizība.

Pārsūtīšanas procedūra

Bet tas ir visinteresantākais. Datu migrācijas koda izpildei ir divas iespējas:

  • Kods tiek izpildīts Excel darbgrāmatā, dati tiek nodoti Word pa vienai vērtībai un nekavējoties tiek ievietoti dokumentā.
  • Kods tiek izpildīts atsevišķā Word dokumentā, visi dati tiek pārsūtīti no Excel vienā partijā.

No izpildes ātruma viedokļa, it īpaši ar lielu grāmatzīmju skaitu, otrā iespēja izskatās daudz pievilcīgāka, taču tai ir nepieciešamas sarežģītākas darbības. Tas ir tas, ko es izmantoju.

Lūk, kas jādara:

  • Izveidojiet Word dokumenta veidni ar iespējotu makro.Šajā veidnē būs izpildāmais VBA kods.
  • Izveidotajā veidnē jāievieto VBA valodā rakstīta programma. Lai to izdarītu, rediģējot veidni, nospiediet taustiņu kombināciju Alt + F11 un atvērtajā Visual Basic redaktora logā ievadiet programmas kodu.
  • Excel darbgrāmatā ierakstiet kodu, kas izsauc aizpildīšanas procedūru no jaunizveidotās Word veidnes.

Procedūras tekstu rakstā nesniegšu - to var ērti apskatīt FillDocument.dotm failā, kas atrodas piemēru arhīva mapē Template.

Kā to visu izmantot, lai atrisinātu savu konkrēto problēmu?

Es saprotu, ka vārdos tas viss izskatās ļoti vienkārši, bet kas notiek praksē? Es iesaku jums vienkārši izmantot gatavo iespēju. Lejupielādējiet arhīvu ar piemēru, Excel darbgrāmatā nospiediet taustiņu kombināciju Alt + F11, lai atvērtu Visual Basic redaktoru un izlasītu visus manus komentārus par programmu. Lai mainītu programmu atbilstoši savām vajadzībām, ir jāmaina tikai dažu konstantu vērtība, tās tiek ievietotas programmas pašā sākumā. Jūs varat brīvi kopēt visu programmas tekstu savā projektā.

Arhīva struktūra

Šim rakstam pievienotajā arhīvā ir vairāki faili.

Galvenais fails ir Excel darbgrāmata ar nosaukumu "Ģenerēt apstiprinājumus". Šajā darbgrāmatā ir 4 darblapas, no kurām tiek parādītas tikai divas: "Ievade" - datu ievades lapa un "Datu bāze" - visu ievadīto dokumentu arhīvs.

Mapē Veidnes ir Word dokumentu veidnes. Viena no tām ir veidne, kurā ir grāmatzīmju aizpildīšanas programma, bet otrā ir aizpildāma veidlapa. Jūs varat izmantot veidni ar programmu bez izmaiņām, bet aizpildāmā veidlapa, protams, būs jāmaina atbilstoši jūsu vajadzībām.

Kā pārstrādāt piemēru "priekš sevis"?

  1. Sagatavojiet Word dokumenta veidni, kas jāaizpilda. Izveidojiet tajā visas nepieciešamās grāmatzīmes un saglabājiet to kā "MS Word veidni".
  2. Kopējiet failu FillDocument.dotm no šim rakstam pievienotā arhīva uz mapi ar sagatavoto veidni. Šis fails ir atbildīgs par veidņu grāmatzīmju aizpildīšanu, un tajā nekas nav jāmaina.
  3. Sagatavojiet Excel darbgrāmatu datu ievadei. Jums ir jāizlemj, vai tam būs kāds "uzlabots" lietotāja interfeiss, un jāveic daži viltīgi aprēķini. Galvenais, lai tajā būtu darblapa ar atbilstības tabulu starp grāmatzīmes nosaukumu Word veidnē un aizvietojamo vērtību.
  4. Sagatavotajā darbgrāmatā ievietojiet VBA programmas kodu no parauga faila. Nomainiet visas konstantes atbilstoši savam projektam.
  5. Pārbaudiet pareizu darbību.
  6. Aktīvi izbaudi!

A, uzvārdi kolonnā B un profesijas kolonnā C.

2. Izveidojiet Word dokumentu (.doc vai .docx)


(A), (B) un (C).

(A), (B) un (C) (A)- vārds, (B)- uzvārds, (C)- profesija.

Iestatījumi programmas.

3. Izvēlieties failu un mapju ceļus


Izvēlieties

4. Iestatiet vajadzīgo datu lapas un rindas


Excel failu datu lapas

Excel faila datu rindas Excel failu datu lapas

1 .

Ja vēlaties, lai dokumenta veidošanā piedalās visas jūsu excel faila lapas un/vai rindas ar datiem, noklikšķiniet uz atbilstošās pogas labajā pusē ar uzrakstu cipariem(tā uzraksts mainīsies uz Visi).

5. Iestatiet nosaukumu veidni jauniem Word failiem


Iestatiet nosaukumu veidni jauniem Word failiem:

Jaunu vārdu failu nosaukumu veidne ir programmas ģenerēto jauno dokumentu (word-failu) nosaukumu veidne. Šeit nosaukuma veidnē ir iekļauti Excel faila kolonnu nosaukumi, kas ierāmēti ar cirtainiem iekavām: (A) un (B). Ģenerējot jaunu dokumentu, programma aizstās visus (A) un (B) atbilstošās šūnu vērtības no Excel faila - tas būs jaunā dokumenta (word faila) nosaukums.

Cilnē varat iestatīt savas apmales rakstzīmes Iestatījumi programmas.

6. Noklikšķiniet uz "Ģenerēt".


Noklikšķiniet uz pogas Ģenerēt un ekrānā tiks parādīts progress. Dokumenti (word-faili) tiks izveidoti tieši tik daudz excel faila rindiņu, kas ir iesaistītas veidošanā.

7. Viss


Visi dokumenti (word faili) ir izveidoti un atrodas norādītajā mapē Mape jauno Word failu saglabāšanai. Viss :)

Exwog- veidņu atskaites ģenerators no Excel uz Word

Bezmaksas Word failu ģenerators pēc veidnes (Word fails), pamatojoties uz Excel faila datiem

Darbojas operētājsistēmās Mac OS, Windows un Linux

Ļauj iestatīt jauno ģenerēto vārdu failu nosaukumus

Ļauj iestatīt nepieciešamo datu lapas un rindas

Ļauj iestatīt apmales rakstzīmes Excel kolonnu nosaukumiem

Viegli izmantot

Saglabājiet savus datus Excel formātā (.xls un .xlsx) un ģenerējiet Word failus (.doc un .docx) ar dažiem klikšķiem :)


Kā tas strādā?

Apskatiet savu Excel failu


Šajā piemērā Excel failā ir informācija par klientiem. Katra rinda atbilst konkrētam klientam. Vārdi ir norādīti kolonnā A, uzvārdi kolonnā B un profesijas kolonnā C.

Noklikšķiniet, lai skatītu

Izveidojiet Word dokumentu (.doc vai .docx)


Noklikšķiniet, lai skatītu

Izveidojiet "veidni" (word-failu) jaunu dokumentu (word-failu) ģenerēšanai. Šeit "veidnes" tekstā ir iekļauti Excel faila kolonnu nosaukumi, kas ierāmēti ar cirtainiem iekavām: (A), (B) un (C).

Programma ģenerēs jaunus dokumentus saskaņā ar "veidni", aizstājot visus (A), (B) un (C) atbilstošās šūnu vērtības no Excel faila: (A)- vārds, (B)- uzvārds, (C)- profesija.

Cilnē varat arī iestatīt savas apmales rakstzīmes Iestatījumi programmas.

Izvēlieties failu un mapju ceļus


Atlasiet failu un mapju ceļus (pogas, kas apzīmētas Izvēlieties). Programmā jūs norādāt šādus ceļus:

Excel fails ar datiem (*.xls, *.xlsx)- tas ir ceļš uz jūsu Excel failu ar datiem (informāciju par klientu);

Word veidnes fails (*.doc, *.docx) ir ceļš uz jūsu "veidni" (iepriekšējā darbībā izveidotais Word fails);

Mape jauno Word failu saglabāšanai- tas ir ceļš uz mapi, kurā programma saglabās jaunģenerētos dokumentus.

Noklikšķiniet, lai skatītu

Iestatiet vajadzīgo datu lapas un rindas


Noklikšķiniet, lai skatītu

Iestatiet sava Excel faila lapu un rindu skaitu ar datiem (informāciju par klientiem), uz kuriem vēlaties ģenerēt dokumentus:

Excel failu datu lapas- jūsu excel faila lapu skaits, kas tiks iesaistīts jaunu dokumentu veidošanā;

Excel faila datu rindas- lokšņu rindu numuri (lapas, kas norādītas Excel failu datu lapas) jūsu Excel failā, kas tiks iesaistīts jaunu dokumentu veidošanā. Balstoties uz katras norādītās rindas datiem, tiks izveidots atsevišķs dokuments (word-fails).

Lapu un rindu numerācija programmā sākas ar 1 .