Ilustrirani vodič za upravljanje dokumentima. Automatizacija izrade izvedbene dokumentacije za građenje u Excelu Automatizacija izrade dokumentacije u ms excelu

03.10.2020 Sigurnost


Ovaj članak posvećen je temi koja možda nije nova, ali je, kako pokazuju pisma čitatelja, još uvijek relevantna - automatizacija Microsoft Office aplikacija. Mnogi programeri su u procesu rada na svojim projektima (bez obzira na to koji razvojni alat koriste - Delphi, C++Builder, Visual Basic:) često koriste usluge Microsoft Officea, npr. građenje stožerne tablice i dijagrami sa koristeći Microsoft Excel, generiranje i ispis dokumenata korištenjem Microsoft Word itd. Često korisnici koji su navikli koristiti Microsoft Office aplikacije u svakodnevnom radu inzistiraju na korištenju takvih servisa u aplikacijama ili jednostavno na spremanju izvješća i drugih dokumenata u neki od Microsoft formati Ured. Imajte na umu da potencijalne želje ove vrste Microsoft već duže vrijeme uzima u obzir - gotovo sve što korisnik bilo koje Microsoft Office aplikacije s pomoću izbornika, tipkovnice i alatne trake, također se može napraviti automatski, odnosno ili iz VBA programa ili iz aplikacije kreirane pomoću nekog od razvojnih alata. Drugim riječima, aplikacije Microsoft Officea mogu se programirati. Programabilnost općenito znači sposobnost upravljanja određenom aplikacijom pomoću makro jezika ili pomoću drugih aplikacija. Sve komponente sustava Microsoft Office podržavaju isti makro jezik: Visual Basic za aplikacije (VBA), koji vam omogućuje stvaranje aplikacija izravno unutar dokumenata sustava Office (tzv.<решения на базе Microsoft Office>). Upravljanje Office komponentama iz drugih aplikacija provodi se pomoću automatizacije (Automation, ranije OLE Automation) - sve Microsoft Office aplikacije su poslužitelji za automatizaciju (ili COM poslužitelji). Za izradu takvih aplikacija prikladni su svi razvojni alati koji vam omogućuju stvaranje kontrolera automatizacije (COM klijenata). U tu svrhu najčešće se koristi Visual Basic, ali može biti i Delphi, C++Builder i Visual C++. Međutim, prije rasprave o mogućnostima određenih razvojnih alata, trebali biste razumjeti što je automatizacija.

Ukratko o automatizaciji

Automatizacija je jedna od mogućnosti koju pruža tehnologija Microsoft COM (Component Object Model). Ne ulazeći u detalje implementacije ove tehnologije, napominjemo da je koriste aplikacije (zvane COM poslužitelji) kako bi drugim aplikacijama (zvane COM klijenti) omogućile pristup svojim objektima, kao i svojstvima i metodama tih objekata. ), koji također mogu biti razvojni alati. Na primjer, program za obradu teksta, budući da je COM poslužitelj, može omogućiti drugim aplikacijama pristup dokumentu, odlomku ili knjižnoj oznaci pomoću odgovarajućih objekata. Za imenovanje (i identifikaciju) COM poslužitelja obično se koriste posebne oznake nizova - programski identifikatori (ProgID). Oni su potrebni da bi se operacijski sustav mogao upotrijebiti ove identifikatore za određivanje u kojem direktoriju (ili na kojem računalu lokalna mreža, ako se koristi jedna ili druga metoda daljinski pristup na poslužitelj) nalazi se izvršna datoteka poslužitelja za automatizaciju i pokrenite je za izvođenje. O tome koji se točno programski identifikatori koriste za pojedinu Microsoft Office aplikaciju bit će riječi u odjeljcima posvećenim tim aplikacijama.

S programskog gledišta, objekti automatizacije se ne razlikuju mnogo od običnih objekata koji su nam poznati iz teorije i prakse objektno orijentiranog programiranja. Kao i obični objekti, oni imaju svojstva i metode. Svojstvo je karakteristika objekta; na primjer, svojstvo odlomka (Paragraph object) može biti njegov Style. Metoda je radnja koja se može izvesti na objektu (na primjer, možete spremiti dokument pomoću metode SaveAs objekta Document).

Često poslužitelji za automatizaciju sadrže skupove objekata iste vrste, koji se nazivaju zbirkama. Na primjer, program za obradu teksta može sadržavati zbirku dokumenata, a svaki dokument može sadržavati zbirku odlomaka.

Kako mogu saznati koji su objekti dostupni na poslužiteljima za automatizaciju? U tu svrhu svaki poslužitelj za automatizaciju uključuje dokumentaciju i datoteke pomoći koje opisuju njegov objektni model. Ako uzmemo Microsoft Office 2000 aplikacije, onda su to datoteke pomoći za programere koji koriste Visual Basic za aplikacije VBAxxx9.CHM (za Microsoft Office 97 - VBxxx8.HLP, odnosno). Imajte na umu da nisu instalirani prema zadanim postavkama, jer su potrebni programerima, a ne običnim korisnicima.

Sve informacije o objektu koje zahtijevaju kontroleri automatizacije sadržane su u bibliotekama tipova. Biblioteke tipova pohranjuju se u posebnom binarnom formatu i obično se prikazuju kao datoteke s ekstenzijama *.olb ili *.tlb, a mogu se nalaziti i unutar izvršne datoteke(*.exe) ili dinamički učitavane biblioteke (*.dll). Biblioteke tipova mogu se pregledavati pomoću uslužnog programa OleView koji je uključen u Microsoft Platform SDK, a Borlandovi razvojni alati sadrže vlastite uslužne programe za pregled biblioteke tipova.

Za kraj ovog više nego kratkog uvoda u automatizaciju, zadržimo se i na konceptu uvezivanja. Vezanje je način na koji se varijabla ili klasa aplikacije kontrolera odnosi na objekt automatizacije. Postoje dvije takve metode: kasno uvezivanje i rano uvezivanje.

Kasno vezanje znači da se stvarna referenca na objekt u varijabli ili klasi pojavljuje tijekom izvođenja u aplikaciji kontrolera. Ova je metoda obično sporija od prethodnog vezanja, ali je dostupna u svim razvojnim alatima koji vam omogućuju stvaranje automatiziranih kontrolera i manje je osjetljiva na to jesu li svi parametri metode navedeni kada se pozivaju u kodu aplikacije kontrolera. Kod kasnog povezivanja, ispravnost poziva metode provjerava se u trenutku kada su napravljeni, odnosno u fazi izvršavanja aplikacije, a ne u fazi njene kompilacije.

Rano vezanje znači da se stvarna referenca na objekt automatizacije pojavljuje tijekom kompilacije. Stoga, aplikacijski kod kontrolera zahtijeva referencu na biblioteku tipova (ili na poseban modul koji je njeno sučelje), a to dovodi do generiranja klasa u ovoj aplikaciji s istim svojstvima i metodama kao objekti automatizacije, što čini provjera sintakse mogućih naziva metoda tijekom kompajliranja i pristup imenovanim konstantama sadržanim u biblioteci tipova. Međutim, imajte na umu da ne podržavaju i svi razvojni alati koji podržavaju kasno povezivanje rano uvezivanje.

Nakon što smo završili izlet u COM i automatizaciju, vratimo se na pitanje koje je razvojne alate prikladno koristiti za stvaranje kontrolera za automatizaciju.

VBA i alati za razvoj kontrolera automatizacije

Kao što je gore spomenuto, kontroleri za automatizaciju mogu se kreirati pomoću različitih razvojnih alata, a ako već koristite neki od alata koji podržavaju izradu kontrolera za automatizaciju, možete ga koristiti. Jedino što biste trebali učiniti je saznati podržava li vaš razvojni alat prethodno povezivanje ako ga namjeravate koristiti. Primjeri jednostavnih kontrolera za automatizaciju (obično za Microsoft Word ili Microsoft Excel), koji daju ideju o tome kako se pozivaju metode poslužitelja, obično se mogu pronaći u distribucijskom kompletu većine modernih razvojnih alata.

Možete započeti svladavanje objektnog modela automatiziranog poslužitelja snimanjem potrebnog slijeda radnji u obliku makronaredbe pomoću VBA. Možete stvoriti makronaredbu odabirom Alati | Makro | Snimite novi makro. Pregled rezultirajuće makronaredbe u uređivaču VBA koda obično vam omogućuje da shvatite kako bi trebao izgledati kod koji implementira ovaj niz radnji.

Nakon rasprave o mogućim alatima za razvoj automatiziranih kontrolera, konačno možemo prijeći na same Microsoft Office aplikacije, na njihove objektne modele i njihovu upotrebu. Razvojni alat za sljedeće primjere je Borland Delphi 5, ali budući da oni pružaju niz poziva svojstvima i metodama Microsoft Office objekata, prijenos koda na druge programske jezike ne bi trebao predstavljati posebne poteškoće. Osim ako nije drugačije navedeno, svi primjeri u ovom članku koriste rano vezanje.

Microsoft Office objektni modeli

Kao što je gore spomenuto, aplikacije Microsoft Officea omogućuju kontrolerima automatizacije pristup njihovoj funkcionalnosti putem svog objektnog modela, koji je hijerarhija objekata. Objekti mogu omogućiti pristup drugim objektima putem kolekcija.

Za ilustraciju kako izgleda hijerarhija Microsoft Office objekata, ovdje je mali fragment objektnog modela Microsoft Word (Sl. 1):

U objektnim modelima (Sl. 2)

od svih Microsoft Office aplikacija uvijek ima najviše glavni objekt, dostupan aplikaciji kontrolera i predstavlja samu aplikaciju koja se automatizira. Za sve aplikacije sustava Microsoft Office naziva se aplikacija, a mnoga svojstva i metode iste su za sve te aplikacije. Oni koje ćemo najčešće koristiti su sljedeći:

  1. Svojstvo Visible (dostupno na objektu Application svih Microsoft Office aplikacija) omogućuje aplikaciji da se pojavi na zaslonu i na programskoj traci; prihvaća vrijednosti True ( korisničko sučelje aplikacija je dostupna) ili False (korisničko sučelje aplikacije nije dostupno; ovo je zadana postavka). Ako trebate nešto učiniti sa Uredski dokument V pozadina Bez obavijesti korisnika o tome, ne možete pristupiti ovom svojstvu - u ovom slučaju aplikacija se može pronaći samo na popisu procesa pomoću aplikacije Task Manager.
  2. Metoda Quit zatvara Office aplikaciju. Ovisno o tome koju Office aplikaciju automatizirate, ona može ili ne mora imati postavke.

Opća načela za izradu automatiziranih regulatora

Općenito, upravljač automatizacije mora izvršiti sljedeće radnje:

  1. Provjerite radi li kopija poslužiteljske aplikacije.
  2. Ovisno o rezultatima provjere, pokrenite kopiju Office aplikacije koju automatizirate ili se povežite s postojećom kopijom.
  3. Neka prozor poslužiteljske aplikacije bude vidljiv (općenito to nije potrebno).
  4. Izvođenje nekih radnji s aplikacijom poslužitelja (na primjer, stvaranje ili otvaranje dokumenata, promjena njihovih podataka, spremanje dokumenata itd.)
  5. Zatvorite aplikaciju poslužitelja ako je njenu kopiju pokrenuo ovaj kontroler ili odspojite s nje ako se kontroler povezao s postojećom kopijom.

Odgovarajući Delphi kod prikazan je u Listingu 1.

Ovdje smo upotrijebili funkcije GetActiveOleObject i CreateOleObject za povezivanje s već pokrenutom kopijom poslužiteljske aplikacije ili za pokretanje nove ako poslužitelj nije pokrenut, što rezultira referencom na odgovarajući objekt aplikacije poslužitelja koji se postavlja u varijablu varijante.

Gornji dio koda kontrolera može izgledati drugačije u drugim razvojnim alatima - nije izravno povezan s metodama Office objekata, jer je određen pravilima za pozivanje standardnih OLE funkcija u Delphiju (s izuzetkom poziva Visible i Quit metode objekta Application). A ovdje je sve što treba ubaciti umjesto komentara<Здесь выполняются другие действия с объектами приложения Office>, u različitim razvojnim alatima trebali bi izgledati više-manje isto - koristeći stvorenu varijablu varijante, manipuliramo metodama i svojstvima Application objekta.

U zaključku ćemo dati jednu malu napomenu u vezi s brojem parametara metoda objekata automatizacije. U slučaju korištenja kasni uvez broj parametara metode navedenih u kodu ne mora se podudarati s njihovim stvarnim brojem (koji se može pronaći u opisu objektnog modela odgovarajuće aplikacije). U ovom slučaju, sljedeći kod je sasvim prihvatljiv:

iako metoda Quit objekta Application ima parametre u slučaju nekih Microsoft Office aplikacija (primjerice Microsoft Word).

Kada koristite rano vezanje, na primjer, kada kreirate kontrolere koristeći Delphi, trebali biste biti stroži u definiranju parametara - njihov broj i vrsta moraju odgovarati opisu metoda u biblioteci tipova. Na primjer, u slučaju ranog povezivanja, ispravan Delphi kod za zatvaranje Word dokument sa zadanim vrijednostima svih parametara izgledat će ovako:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

Iznimka od ovog pravila je Visual Basic - ovaj razvojni alat omogućuje vam da ne razmišljate o broju parametara metode prilikom pisanja koda.

Raspravivši generalni principi stvaranje kontrolera za automatizaciju i nakon što smo naučili kako se to radi koristeći Borland Delphi, možemo prijeći na razmatranje automatizacije specifične aplikacije Microsoft Office. Počnimo s jednom od najpopularnijih komponenti ovog paketa - Microsoft Word.

Identifikatori programa i Microsoft Word objektni model

Sljedeći objekti izravno su dostupni aplikaciji kontrolera:

Svi ostali Word objekti su takozvani interni objekti. To znači da se ne mogu sami stvoriti; stoga se Paragraph objekt ne može kreirati odvojeno od dokumenta koji ga sadrži.

Ako se sjećate da je glavna svrha Worda rad s dokumentima, lako možete razumjeti hijerarhiju njegovog objektnog modela (fragment je prikazan na slici 1). Glavni objekt u njoj, kao i u svim ostalim Microsoft Office aplikacijama, je Application object koji sadrži Documents kolekciju objekata tipa Document. Svaki objekt Document sadrži kolekciju objekata Paragraphs tipa Paragraph, Bookmarks tipa Bookmark, Characters tipa Character itd. Manipulacija dokumentima, odlomcima, simbolima, knjižnim oznakama zapravo se provodi pristupom svojstvima i metodama tih objekata.

U nastavku ćemo pogledati najčešće zadatke vezane uz Microsoft automatizacija Riječ. Ako naiđete na zadatak koji se ne podudara ni s jednim od gore navedenih, možete pokušati pronaći odgovarajući primjer u Visual Basicu u datoteci pomoći VBAWRD9.CHM ili, kao što je gore spomenuto, zapišite potreban niz radnji u obrazac makronaredbe i analizirati njen kod.

Izrada i otvaranje Microsoft Word dokumenata

Za stvaranje primjera koristeći Microsoft Word može koristiti gore navedeni kod za stvaranje kontrolera i modificirati ga zamjenom komentara kodom koji manipulira svojstvima i metodama objekta Word.Application. Počet ćemo s izradom i otvaranjem dokumenata.

Stvoriti novi dokument Word se može napraviti korištenjem metode Dodaj zbirke dokumenata objekta aplikacije:

App.Documents.Add;

Kako izraditi prilagođeni dokument? Vrlo je jednostavno - trebate navesti naziv predloška kao parametar metode Dodaj:

App.Documents.Add("C:\Programske datoteke\ _ Microsoft Office\Templates\1033\Manual.dot");

Za otvaranje postojećeg dokumenta upotrijebite metodu Otvori zbirke Dokumenti:

App.Documents.Open("C:\MyWordFile.doc");

Imajte na umu da svojstvo ActiveDocument objekta Word.Application ukazuje na trenutno aktivni dokument među jednim ili više otvorenih. Osim toga, dokumentu se može pristupiti po njegovom serijskom broju metodom Stavka; na primjer drugome otvoreni dokument možete ga kontaktirati ovako:

App.Documents.Item(2)

Imajte na umu da numeriranje članova zbirke u Microsoft Officeu počinje s jedan.

Dokument možete učiniti aktivnim pomoću metode Aktiviraj:

App.Documents.Item(1).Activate;

Sljedeće što biste trebali naučiti je spremiti Word dokument i zatvoriti sam Word.

Spremite, ispišite i zatvorite Microsoft Word dokumente

App.Documents.Item(2).Close;

App.ActiveDocument.Close ;

Metoda Zatvori ima nekoliko izbornih (u slučaju kasnog uvezivanja) parametara koji utječu na pravila za spremanje dokumenta. Prva od njih utječe na to hoće li se promjene napravljene u dokumentu spremiti i uzima tri moguće vrijednosti (preporuča se da se odgovarajuće konstante opisuju u aplikaciji. Vidi listing 2):

Treći parametar ima vrijednost True ili False i utječe na to hoće li se dokument proslijediti sljedećem korisniku putem e-pošta. Ako vam ova funkcija nije potrebna, možete zanemariti ovu postavku.

Dakle, kada koristite ove parametre, možete zatvoriti dokument, na primjer, ovako:

App.ActiveDocument.Close(wdSaveChanges, _ wdPromptUser) ;

App.ActiveDocument.Save;

Ova metoda također ima nekoliko izbornih (u slučaju kasnog povezivanja) parametara, od kojih je prvi True ako se dokument automatski sprema i False ako želite ispisati dijaloška ploča za primanje korisničke potvrde za spremanje promjena (ako su napravljene). Drugi parametar utječe na format spremljenog dokumenta, a popis njegovih mogućih vrijednosti podudara se s popisom vrijednosti drugog parametra metode Close.

Podsjećamo vas da možete zatvoriti sam Word pomoću metode Quit objekta Word.Application. Ova metoda općenito ima tri parametra, ista kao i parametri metode Close objekta Document.

Izlaz dokumenta na uređaj za ispis može se izvršiti pomoću metode Ispis objekta Document, na primjer:

App.ActiveDocument.PrintOut;

Ako trebate promijeniti postavke ispisa, trebali biste navesti vrijednosti odgovarajućih parametara metode PrintOut (u slučaju Microsoft Worda ima ih oko dvadeset).

Umetanje teksta i objekata u dokument i oblikovanje teksta

Da biste stvorili odlomke u dokumentu, možete koristiti kolekciju Odlomci objekta Document, koja predstavlja skup odlomaka u određenom dokumentu. Možete dodati novi odlomak pomoću metode Dodaj ove zbirke:

App.ActiveDocument.Paragraphs.Add;

Za umetanje stvarnog teksta u dokument, međutim, ne koristi se objekt Paragraph, već objekt Range, koji predstavlja bilo koji kontinuirani dio dokumenta (uključujući novostvoreni odlomak). Ovaj objekt se može stvoriti različiti putevi. Na primjer, možete odrediti početne i završne znakove raspona (ako postoje u dokumentu):

Var Rng: varijanta; ... Rng:= App.ActiveDocument.Range(2,4); //2. do 4. znakova

ili označite broj odlomka (na primjer, onaj koji ste upravo stvorili):

Rng:= App.ActiveDocument.Paragraphs.Item(1).Range;

ili označite nekoliko sljedećih odlomaka u nizu:

Rng:= App.ActiveDocument.Range _ (App.ActiveDocument.Paragraphs.Item(3).Range.Start,_ App.ActiveDocument.Paragraphs.Item(5).Range.End)

Tekst možete umetnuti koristeći metode InsertBefore (ispred raspona) ili InsertAfter (nakon raspona) objekta Range, na primjer:

Rng.InsertAfter("Ovo je tekst koji treba umetnuti");

Osim Range objekta, tekst se može umetnuti pomoću Selection objekta koji je svojstvo objekta Word.Application i predstavlja odabrani dio dokumenta (ovaj objekt nastaje kada korisnik mišem odabere dio dokumenta). , a može se izraditi i pomoću aplikacije kontrolera). Sam objekt Selection može se stvoriti primjenom metode Select na objekt Range, na primjer:

Var Sel: Varijanta; ... App.ActiveDocument.Paragraphs.Item(3).Range.Select;

Gornji primjer ističe treći odlomak u trenutnom dokumentu.

Ako želimo umetnuti redak teksta u dokument, bilo umjesto ili prije odabranog dijela teksta, to možemo učiniti pomoću sljedećeg dijela koda:

Var Sel: Varijanta; ... Sel:= App.Selection; Sel.TypeText("Ovo je tekst kojim ćemo zamijeniti _ odabir");

Imajte na umu da ako je svojstvo Options.ReplaceSelection objekta Word.Application True, odabrani tekst bit će zamijenjen novim tekstom (ovo je zadano); ako želite da se tekst umetne ispred odabranog fragmenta, a ne umjesto njega, trebate postaviti ovo svojstvo na False:

App.Options.ReplaceSelection:= False;

Znak za kraj odlomka kada se koristi objekt Selection može se umetnuti pomoću sljedećeg isječka koda:

Sel.TypeParagraph;

Možete primijeniti metode InsertBefore i InsertAfter na objekt Selection, baš kao i na objekt Range. U ovom slučaju, za razliku od prethodnog, zalijepljeni tekst postat će dio odabranog fragmenta teksta.

S objektom Selection, koristeći njegovo svojstvo Font i svojstva objekta Font, kao što su Bold, Italic, Size,:, možete oblikovati tekst. Na primjer, na ovaj način možete umetnuti označenu liniju podebljano:

Sel.Font.Bold:= True; Sel.TypeText("Ovo je tekst koji ćemo istaknuti _ podebljanim."); Sel.Font.Bold:= False; Sel.TypeParagraph;

Za preklapanje unaprijed određenog stila na umetnuti tekst, možete koristiti svojstvo Style istog objekta, na primjer:

Sel.Style:= "Naslov 1"; Sel.TypeText("Ovo je tekst koji će postati _ naslov"); Sel.TypeParagraph;

Word dokumenti često sadrže podatke iz drugih aplikacija. Najjednostavniji način umetnite takve podatke u dokument - koristite metodu Paste objekta Range:

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Collapse(wdCollapseEnd); Rng.Paste;

Naravno, u ovom slučaju međuspremnik bi već trebao sadržavati podatke koje treba umetnuti.

Ako trebate staviti dio Word dokumenta u međuspremnik, to možete učiniti pomoću metode Kopiraj objekta Range:

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Copy;

Sljedeće što trebate naučiti je pomicanje kursora na željeno mjesto u tekstu, što ćemo učiniti u sljedećem odjeljku.

Pomicanje kursora kroz tekst

Pomoću metode Collapse možete<сжать>Objekt raspona ili objekt odabira, smanjujući njegovu veličinu na nula znakova:

Rng.Collapse(wdCollapseEnd);

Parametar ove metode određuje hoće li izvorni fragment biti na početku ili na kraju. novi objekt Raspon ili odabir. Ako koristite kasno vezanje i vaš razvojni alat nije Visual Basic, trebate definirati odgovarajuće konstante u svojoj aplikaciji:

Const wdCollapseStart = $00000001; //novi objekt je na početku fragmenta wdCollapseEnd = $00000000; //novi objekt je na kraju fragmenta

Pokazivač možete pomicati preko teksta pomoću metode Pomicanje objekata Raspon i Odabir. Ova metoda ima dva parametra. Prvi označava u kojim se jedinicama mjeri kretanje - u znakovima (prema zadanim postavkama), riječima, rečenicama, odlomcima itd. Drugi parametar označava koliko jedinica trebate pomaknuti (ovaj broj može biti negativan; prema zadanim postavkama je 1 ) . Na primjer, sljedeći isječak koda:

Rng.Move;

će pomaknuti kursor jedan znak naprijed, i

Rng.Move(wdParagraph,3);

pomaknut će kursor tri paragrafa naprijed. Imajte na umu da ova metoda koristi sljedeće konstante:

Const //Jedinica kretanja je: wdCharacter = $00000001; //znak wdWord = $00000002; //riječ wdSentence = $00000003; //rečenica wdParagraph = $00000004; //odlomak wdStory = $00000006; //dio dokumenta //npr. zaglavlje, //sadržaj, itd.) wdSection = $00000008; //odjeljak wdColumn = $00000009; //stupac tablice wdRow = $0000000A; //redak tablice wdCell = $0000000C; //ćelija tablice wdTable = $0000000F; //stol

Oznake se često koriste za navigaciju kroz tekst. Knjižnu oznaku možete stvoriti na trenutnoj poziciji pokazivača dodavanjem člana zbirke Knjižne oznake objekta Document pomoću metode Dodaj, navodeći naziv knjižne oznake kao parametar, na primjer:

App.ActiveDocument.Bookmarks.Add("MyBookmark");

Možete provjeriti postojanje knjižne oznake u dokumentu pomoću metode Exists i prijeći na nju pomoću metode Goto objekata Document, Range ili Selection:

Rng:= App.ActiveDocument.Goto(wdGoToBookmark, wdGoToNext,"MyBookmark"); Rng.InsertAfter("Tekst umetnut nakon oznake");

Konstantne vrijednosti za ovaj primjer su:

WdGoToBookmark = $FFFFFFFF; //idi na oznaku wdGoToNext = $00000002; //traži sljedeći objekt u tekstu

Imajte na umu da se korištenjem Goto metode možete pomaknuti ne samo na navedenu knjižnu oznaku, već i na druge objekte (crteže, gramatičke pogreške itd.), a smjer kretanja također može biti različit. Stoga popis konstanti koje se mogu koristiti kao parametri ovu metodu, prilično velik.

Izrada tablica

Postoje dva načina za izradu tablica. Prvi je pozivanje metode Add zbirke Tables objekta Document i uzastopno ispunjavanje ćelija podacima. Ova metoda je prilično spora kada se veže kasno.

Drugi način je mnogo više<быстрый>, sastoji se od kreiranja teksta iz nekoliko redaka koji sadrže podstringove s razdjelnicima (kao razdjelnik se može koristiti bilo koji ili gotovo svaki znak, samo trebate znati da se on ne pojavljuje u podacima koji će biti smješteni u budućoj tablici), a zatim pretvaranje takvog teksta u tablicu pomoću metode ConvertToTable objekta Range. Ispod je primjer stvaranja tablice od tri retka i tri stupca pomoću ove metode (zarez se koristi kao razdjelnik, što je prvi parametar metode ConvertToTable):

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Collapse(wdCollapseEnd); Rng.InsertAfter("1, 2, 3"); Rng.InsertParagraphAfter; Rng.InsertAfter("4,5,6"); Rng.InsertParagraphAfter; Rng.InsertAfter("7,8,9"); Rng.InsertParagraphAfter; Rng.Pretvori u tablicu(",");

Imajte na umu da izgled tablice se mogu mijenjati korištenjem svojstva Format, kao i korištenjem svojstava kolekcije Columns, koja predstavlja stupce tablice, i kolekcije Rows, koja predstavlja retke tablice objekta Table.

Pristup svojstvima dokumenta

Svojstva dokumenta mogu se dobiti pomoću zbirke BuiltInDocumentProperties objekta Document, na primjer:

Memo1.Lines.Add("Naslov - " + _ App.ActiveDocument.BuiltInDocumentProperties .Value); Memo1.Lines.Add("Autor - " + _ App.ActiveDocument.BuiltInDocumentProperties . _ Vrijednost); Memo1.Lines.Add("Predložak - " + _ App.ActiveDocument.BuiltInDocumentProperties . _Value)

Konstante potrebne za pristup svojstvima dokumenta po imenu prikazane su u ispisu 3.

Dakle, u ovaj odjeljak Proučili smo osnovne operacije koje se najčešće koriste u Microsoft Word automatizaciji. Naravno, mogućnosti automatizacije programa Word daleko od toga da budu iscrpljene navedenim primjerima, no nadam se da ćete ih, vođeni osnovnim načelima stvaranja kontrolera programa Word navedenim u ovom članku i odgovarajućoj datoteci pomoći, moći koristiti - već smo vidjeli da to uopće nije teško.

Postoje tri vrste Excel objekata koji se mogu stvoriti izravno pomoću aplikacije kontrolera. Ovi objekti i njihovi odgovarajući programski identifikatori navedeni su u nastavku.

ostalo Excel objekti su takozvani interni objekti.

Mali fragment Microsoft Excel objektnog modela prikazan je na slici 2:

Jezgra Excel objektnog modela je Application objekt koji sadrži kolekciju Workbooks objekata tipa Workbook. Svaki objekt tipa WorkBook sadrži kolekciju objekata WorkSheets tipa WorkSheet, Charts tipa Chart itd. Manipulacija radnim knjigama, njihovim listovima, ćelijama, grafikonima zapravo se provodi pristupom svojstvima i metodama tih objekata.

U nastavku ćemo pogledati najčešće zadatke povezane s Microsoft Excel automatizacijom. Ako naiđete na zadatak koji ne odgovara nijednom od gore navedenog, možete pokušati pronaći odgovarajući primjer Visual Basica u datoteci pomoći VBAXL9.CHM ili, kao u slučaju Microsoft Worda, snimite odgovarajući makro i analizirajte njegov kod .

Pokrenite Microsoft Excel, kreirajte i otvorite radne knjige

Za izradu primjera pomoću programa Microsoft Excel, možete koristiti kod za izradu kontrolera koji se nalazi u<Общие принципы создания контроллеров автоматизации>, zamjenjujući prvu izjavu u danom primjeru sa sljedećim:

AppProgID:= "Excel.Application";

i zamijenite komentare kodom koji manipulira svojstvima i metodama objekta Excel.Application. Imajte na umu, međutim, da povezivanje kontrolera za automatizaciju s postojećom verzijom programa Excel pomoću metode GetActiveOleObject može dovesti do toga da cijela klijentska strana programa Excel bude nevidljiva (to se događa ako postojeća kopija programa Excel radi u načinu rada u kojem njegovo korisničko sučelje nije dostupno ). Razlozi ovakvog ponašanja autoru nisu poznati. Stoga, ako postoji mogućnost da se dogodi takva situacija, bolje je pojednostaviti kod za izradu kontrolera i uvijek kreirati novu kopiju Excela.

Počet ćemo učiti kako izraditi Excel kontrolere stvaranjem i otvaranjem radnih knjiga.

Stvorite novi radni Excel radna knjiga možete koristiti metodu Dodaj zbirke Radne knjige objekta aplikacije:

App.WorkBooks.Add;

Da biste stvorili radnu knjigu na temelju predloška, ​​navedite njezin naziv kao prvi parametar metode Dodaj:

App.WorkBooks.Add("C:\Program Files\Microsoft _ Office\Templates\1033\invoice.xlt");

Također možete koristiti sljedeće konstante kao prvi parametar ove metode:

Const xlWBATChart = $FFFFEFF3; //radna knjiga sastoji se od lista s dijagramom xlWBATWorksheet = $FFFFEFB9; //radna knjiga se sastoji od lista s podacima

U ovom slučaju, radna knjiga će sadržavati jedan list tipa koji je specificiran navedenom konstantom (graf, obični list s podacima, itd.)

Za otvaranje postojećeg dokumenta upotrijebite metodu Otvori zbirke Radne knjige:

App.Documents.Open("C:\MyExcelFile.xls");

Imajte na umu da svojstvo ActiveWorkBook objekta Excel.Application označava trenutno aktivnu radnu knjigu među jednom ili više otvorenih. Osim toga, radnoj knjizi se može pristupiti putem njenog serijskog broja, na primjer, drugoj otvorenoj radnoj knjizi može se pristupiti ovako:

App.Radne bilježnice

Imajte na umu da se u Delphiju, kada se koristi kasno vezanje, sintaksa koja se koristi za pristup članovima Excelovih zbirki objekata razlikuje od sintakse koja se koristi za pristup Objekti riječi- u slučaju Worda koristili smo metodu Item, au slučaju Excela članovima kolekcije pristupamo kao elementima polja. Međutim, ako koristite Visual Basic, sintaksa koja se koristi za pristup članovima zbirke ista je za sve zbirke Microsoft Officea.

Radnu knjigu možete učiniti aktivnom pomoću metode Aktiviraj:

App.WorkBooks.Activate;

Sljedeće što biste trebali naučiti je spremati radne knjige u datoteke.

Spremanje, ispis i zatvaranje Microsoft Excel radnih knjiga

Zatvaranje dokumenta može se izvršiti metodom Zatvori:

App.WorkBooks.Close;

App.ActiveWorkBook.Close;

Metoda Zatvori ima nekoliko izbornih (u slučaju kasnog povezivanja) parametara koji utječu na pravila za spremanje radne knjige. Prvi parametar ima vrijednost True ili False i utječe na to hoće li se promjene napravljene u radnoj knjizi spremiti. Drugi parametar (Variant type) je naziv datoteke u koju će se spremiti radna knjiga (ako su u njoj napravljene promjene). Treći parametar, također True ili False, utječe na to hoće li se dokument proslijediti sljedećem korisniku putem e-pošte i može se zanemariti ako se ova funkcija ne koristi.

App.ActiveWorkBook.Close(True,"C:\MyWorkBook.xls");

App.ActiveWorkBook.Save;

App.ActiveWorkBook.SaveAs("C:\MyWorkBook.xls");

Metoda SaveAs ima više od desetak parametara koji utječu na to kako će se dokument spremati (pod kojim imenom, sa ili bez lozinke, koja je kodna stranica za tekst koji sadrži itd.).

Sam Excel možete zatvoriti pomoću metode Quit objekta Excel.Application. U slučaju Excela, ova metoda nema parametara.

Zaključak Excel dokument na uređaj za ispis može se izvršiti pomoću metode PrintOut objekta WorkBook, na primjer:

App.ActiveWorkBook.PrintOut;

Ako trebate promijeniti postavke ispisa, morate navesti vrijednosti odgovarajućih parametara metode PrintOut (u slučaju Excela, ima ih osam).

Pristup listovima i ćelijama

Listovima u radnoj knjizi pristupa se pomoću zbirke WorkSheets objekta WorkBook. Svaki član ove zbirke predstavlja objekt WorkSheet. Član ove zbirke može se nazvati brojem indeksa, na primjer:

App.WorkBooks.WorkSheets.Name:= _ "Stranica 1";

Gornji primjer ilustrira kako možete promijeniti naziv lista radne knjige.

Također se možete pozvati na list radne bilježnice po imenu, na primjer:

App.WorkBooks.WorkSheets["Sheet1"].Name:= _ "Page 1";

Pojedinačnim ćelijama radnog lista pristupa se pomoću zbirke Ćelije objekta WorkSheet. Na primjer, možete dodati podatke u ćeliju B1 na sljedeći način:

App.WorkBooks.WorkSheets["Sheet1"].Cells.Value:="25";

Ovdje prva od koordinata ćelije pokazuje na broj retka, a druga na broj stupca.

Dodavanje formula u ćelije vrši se na sličan način:

App.WorkBooks.WorkSheets["Sheet1"] _ .Cells.Value:= " =SUM(B1:B2)";

Ćeliju možete očistiti pomoću metode ClearContents.

Tekst u ćelijama formatiran je pomoću svojstava Font i Interior objekta Cell i njihovih podsvojstava. Na primjer, sljedeći isječak koda prikazuje tekst u ćeliji crvenim, podebljanim Courier fontom od 16 točaka na žutoj pozadini:

App.WorkBooks.WorkSheets.Cells.Interior _ .Color:= clYellow; App.WorkBooks.WorkSheets.Cells.Font _ .Color:= clRed; App.WorkBooks.WorkSheets.Cells _ .Font.Name:= "Courier"; App.WorkBooks.WorkSheets.Cells _ .Font.Size:= 16; App.WorkBooks.WorkSheets.Cells _ .Font.Bold:= True;

ID programa

Recenzije o majstorskim tečajevima i treninzima

Osobni raspored lekcija je samo božji dar!

Dobar dan, Dmitry! Stvarno sam uživao u vašem programu. Svidio mi se sadržaj (razmotreno je dosta situacija), organizacija (osobni raspored lekcija je samo božji dar!), prezentacija (sve je vrlo jasno i razumljivo).

Posebno mi se svidjelo kad si rješavao probleme u uživo, uvijek tražim od nastavnika da razmišljaju naglas, jer tako dolazi do izražaja logika zaključivanja, logika traženja i rješavanja problema.

Sada, kao u dječjoj pjesmici:

kako dobro pisati

nema potrebe gnjaviti svog prijatelja,

nema potrebe zvati

nema potrebe čekati

Ili ga možete uzeti i napisati! (olakšava sebi posao)

Hvala puno!

Tatjana Bogoslavskaja o praktičnoj obuci

U veljači 2013. već sam sudjelovao u webinaru (blok "Praktičar" i "Specijalist") koji je vodio Dmitry.

Trening u studenom 2013. već mi je drugi. Bit će prilika i zanimljiva tema - svakako ću pokušati sudjelovati na sljedećim webinarima, jer... uistinu su sadržajni, zanimljivi i što je najvažnije na kraju se vraćaju u vidu kvalitetnih rezultata u radu.

Neću brbljati s mislima, samo detaljima:

1. Pristupačan;

2. Jasno objašnjenje gradiva na primjerima iz prakse;

3. Brzi i kvalificirani odgovori na pitanja koja se pojave tijekom treninga, na forumu i putem e-pošte;

4. Za održavanje "forme" i konsolidaciju vještina, toplo preporučujem slične webinare i majstorske tečajeve na kojima Dmitry podučava.

Andrey Aganin o praktičnoj obuci

Vrlo rado bih pohađao još koji trening.

Dobar dan, Dmitry!

Hvala na treningu! Ja sam jedan od troje vaših učenika koji su završili sve vaše zadatke. Bilo je vrlo zanimljivo i uzbudljivo. Neki zadaci su se pokazali jednostavnim, a neki vrlo teškim - ovo je bilo vrlo korisno iskustvo. Način prezentiranja materijala pokazao se neobičnim - poslan je video u kojem je istaknuta glavna stvar u zadatku, zbog time se uštedjelo vrijeme - mogli ste učiti kad budete imali vremena. S druge strane, nedostajalo je žive komunikacije tijekom koje bi se mogla postavljati pitanja. Vrlo rado bih pohađala još koju edukaciju.Vaš stil podučavanja je da vrlo jednostavno i jasno objašnjavate složene stvari što jako pomaže u savladavanju gradiva.

Sergej Borzenkov o praktičnoj obuci

Naša grupa je bila jednoglasna)

Jučer, 20. studenog 2012., održan je prvi webinar (nadamo se ne i posljednji) koji je vodio Dmitry.

Malo o mojim dojmovima.

1. Još dok sam proučavao njegove besplatne video lekcije, jako mi se svidio njegov način prezentiranja gradiva. Iz vlastitog iskustva znam da su znanje o bilo kojem pitanju i sposobnost objašnjavanja drugima DVIJE velike razlike.

Srećom, Dmitry ima i bogato iskustvo i sklonosti podučavanju. Sve objašnjava na pristupačan i razumljiv način.

2. Tijekom webinara objasnio je kakav je rezultat potrebno postići i sa čisti list napisao makronaredbu, dajući objašnjenja za ovu ili onu naredbu. Odgovarao na pitanja koja su dolazila od “učenika”. Želio bih odmah napomenuti da je bilo malo pitanja.

Detalji Kategorija: Excel Objavljeno: 28. prosinca 2017

Automatizacija izrade izvedbene dokumentacije za građenje u Excelu

Često, kada govore o radu u uredskim aplikacijama, misle na korištenje računala kao pisaćeg stroja i, da budemo iskreni, ovo je prilično skupa zamjena za fizičke mehanizme ako ne iskoristite mogućnosti koje nam daje računalo. Razgovarajmo o ovome.

Uvod.

Po mom mišljenju, PC se pojavio kao alat za rješavanje principa automatizacije rutinskih procesa, iu tome je vraški dobar. Osim toga, razvoj funkcionalni programi postoji povijest stvaranja alata za prevođenje hitnih zadataka u rutinske radnje, kao posljedica produbljivanja podjele rada. Međutim, postoje područja, uklj. i protok dokumenata, gdje se danas računalo koristi upravo kao pisaći stroj, uklj. i zato što nisu napravljeni ozbiljni pomaci zbog činjenice da su plaće ljudi dio režijskih troškova i, kao rezultat toga, nisu velike, što se ne može reći za sve veći volumen protoka dokumenata.

Dakle, govorimo o izgradnji, konkretno o izradi Izvršne dokumentacije (u daljnjem tekstu ED).

o Izvršnoj dokumentaciji

Točnije o njegovoj tekstualnoj komponenti. Ukratko, ID je skup akata, dnevnika i drugih dokumenata, crteža, dijagrama koji se sastavljaju za svaku fazu, pa čak i operaciju (skupinu operacija) u izgradnji, kako bi potvrdili/odbili radove koji se izvode za projekt. Takvi dokumenti su potpuno šablonski, njihov popis, ovisno o vrsti posla, je reguliran, a vode se prema stvarnom rasporedu obavljenih radova, formalizirajući ispravnost/odstupanje radova od projekta odobrenog od strane komisije.

Većina radova zatvorena je u obliku potvrde o inspekciji skrivenog rada (odobrena nalogom Savezne službe za okolišni, tehnološki i nuklearni nadzor od 26. prosinca 2006. N 1128 (kako je izmijenjen, stupio na snagu 6. ožujka 2016. od strane nalog Rostechnadzora od 26. listopada 2015. br. 42 .U daljnjem tekstu AOSR).

Početni podaci za automatizaciju.

Stoga ćemo kao osnovu uzeti obrazac AOSR. Dakle, imamo predložak dokumenta u koji se unose sljedeći podaci:

Broj akta postfiks;
- naziv projekta kapitalne izgradnje;
- pravni podaci o sudionicima građenja (izvođač ili naručitelj; osoba koja izvodi građenje; osoba koja izrađuje projektnu dokumentaciju);
Nositelj građenja koji je izveo radove koji su predmet nadzora; druge osobe.)
- popis osoba s nazivima organizacija, položajima i nalozima koji potvrđuju njihove ovlasti;
- naziv posla koji se izvodi;
- Vrijeme obrade;
- popis radova koji su uključeni u radove koji se izvode;
- poveznice na tehničku dokumentaciju i dijelove projektne/tehničke dokumentacije;
- poveznice na izvršne dijagrame, izvješća o ispitivanju (ako je potrebno);
- popis korištenih materijala s poveznicama na dokumente koji potvrđuju njihovu sukladnost (putovnice, potvrde itd.)

Razmišljanja o temeljnim metodama rješavanja problema

Dakle, za prvu aproksimaciju, možete jednostavno napraviti vizualnu tablicu u kojoj ćemo dodjeljivanjem odgovarajućih polja istog tipa svakom aktu dobiti vizualni prikaz sheme izvođenja radova na objektu. I nije to ništa novo. Dakle, moramo povezati obrazac s ćelijama u podatkovnim tablicama i postoje 2 opcije:

1. Spajanje sa Word datoteka
2. Ispunjavanje predložaka temeljenih na Excelu pomoću makroa.

Svaka od ovih metoda ima svoje prednosti i mane, ali... spajanje vrši zamjenu u stvarnom vremenu, tada sam odlučio odabrati drugu stavku, koju spajanje ne pruža u stvarnom vremenu i svaki put će biti potrebno ponovno ispisati akte, u slučaju ispravka podataka. To je zbog činjenice da mi često treba povijest mojih postupaka.

Dakle, sada se suočavamo s 2 zadatka:

1. Ispunjavanje predloška na temelju tabličnih podataka
2. Koja polja je potrebno unijeti jednom, koja će se mijenjati s vremena na vrijeme i koja će polja biti različita u svakom aktu.

Rješavajući zadatak broj 2, na poseban list stavit ćemo podatke koji će biti objedinjeni unutar objekta/dionice građevinskog projekta - to su:

Spojler

Na trenutnom listu ispunit ćemo samo jednom, a za ostale akte jednostavno ćemo staviti poveznice na ove vrijednosti:

Spojler

I polja koja će se mijenjati u svakom činu:

Spojler

Sada o pogodnostima, ako zapišete imena odgovornih osoba, njihovu organizaciju, redoslijed imenovanja s datumom, a zatim pomoću alata "provjera podataka" možete unijeti njihova imena u spojler i pomoću formule povući svoje regalije.

IFERROR(INDIRECT(CONCATENATE( ""Podaci za projekt"!";ADRESA((MATCH(E30 ; "Podaci za projekt"!$G$15:$G$34;0 ))+14 ;6 )));"-" )

Oni. na listu “Project Data” u rasponu $G$15:$G$34, u 6. stupcu tražimo vrijednost u ćeliji E30, i čim je pronađemo jednostavnom metodom pretvaramo je u adresu koja će pretvoriti u vezu pomoću formula.

Novi problem već leži u duljini retka, ako koristite font Times New Roman broj 10, tada duljina teksta koji će se ispisati ne prelazi 105 znakova. Oni. nailazimo na potrebu stvaranja štake za transfere. Dakle, kod funkcije u VBA:

Funkcija PatrOfString(StringOfTable As String, Nnumber As Byte) As String Dim ArrayBlocks(1 To 10 ) As String Dim i As Integer " Dim j As Integer " Dim k As Integer " Dim p As Integer " For i = 1 To 10 Neka ArrayBlocks (i) = " " Dalje i Neka je k = 1 Neka je p = Len (StringOfTable) Neka je p1 = Len (StringOfTable) Za i = 1 Zaokružiti (Len (StringOfTable) / 105 ) + 1 Korak 1 Ako je p > 0 i p< 105 Then If k <= p1 Then Let МассивБлоков(i) = Mid $(StringOfTable, k, p) Else If Mid (StringOfTable, k, 1 ) = " " Then If k <= p1 Then Let МассивБлоков(i) = Mid $(StringOfTable, k, 105 ) Let p = p - 105 k = k + 105 Else j = 105 * i If j - k >= 105 Zatim j = k + 105 End If Do j = j - 1 Petlja dok je sredina $(StringOfTable, j, 1 )<>" " Neka ArrayBlocks(i) = Mid $(StringOfTable, k, j - k + 1 ) Neka p = p - (j - k + 1 ) Neka k = j + 1 Kraj Ako Kraj Ako Sljedeći i Ako Nbroj - 1 > 0 Then If BlockArray(Nnumber) = BlockArray(Nnumber - 1 ) Then BlockArray(Nnumber) = " " End If PatrOfString = BlockArray(Nnumber)

Oni. Prvo uzmemo tekst, zatim izrežemo 105 znakova, tražimo prvi razmak od kraja, i kada ga nađemo, tekst stavimo u prvi redak niza, duljine od prvog znaka do broja pronađeni prostor. Zatim nastavljamo s operacijom dok ne ponestane teksta ili se izlazni niz ne napuni. U ovoj fazi ograničen je na 10 linija memorije. Zatim pomoću poveznice prikazujemo sadržaj željenog retka od 1-10. Jedan od nedostataka rješenja je što je memorija začepljena, te se za svaki novi zahtjev provodi ponovni izračun. Ali štaka radi.

Sada je izlaz u standardnom AOSR predlošku. Opet postoje 2 opcije, ili ručno dodijeliti mapiranje stupcu (/redak u slučaju vodoravno smještenih podataka za svaki čin), tada će ovo zahtijevati puno vremena i resursa za prilagođavanje svakog novog predloška ili promjenu podataka stol. Zato radimo optimizaciju. Podaci za svaki akt bit će raspoređeni okomito, a usporedba kontrolne kombinacije znakova (na latinici, budući da su sami akti u cijelosti na ćirilici) bit će linije s informacijama u tim aktima, dakle u dvostruko ugniježđenoj petlji, tražeći kontrolnih znakova u tekstu, spojit ćemo traženu vrijednost iz stupca.

Napravite wb.Radne listove( "Primjer ulaznog kontrolnog akta").Copy after:=Worksheets(Worksheets.Count) Postavite newSheet = wb.Worksheets(Worksheets.Count) Za x = 1 do 15 Korak 1 „Pregled kolona u listu „Primjer ulaznog kontrolnog akta“ Za y = 1 do 71 Korak 1 " Prolazimo kroz retke u listu "Primjer ulaznog kontrolnog akta" Ako je Sheets(newSheet.Name).Cells(y, 20 ) = 1 Neka je k = CStr (Sheets(newSheet.Name).Cells(y, x)) “Tražimo samo ako nešto ima u ćeliji Ako k<>"" Onda Za i = 1 Do Broj DataArray Korak 1 Neka k = Zamijeni (k, arrDataLinks(i), Worksheets().Cells(i, ColumnNumber)) Next i newSheet.Cells(y, x) = k End If End If Next y Next x " Ako želite dodati nove podatke za automatsko popunjavanje, nastavite ovaj popis. " Ćelije imaju koordinate u formatu Cells(3, 2), gdje je 3 primjer broja retka, 2 primjer broja stupca " Kako biste jednostavno prepoznali broj stupca, možete omogućiti stil veze R1C1 " (Datoteka -> Opcije -> Formule -> potvrdite okvir "R1C1 Stil veze") " ili navedite koordinate u formatu Cells(1, "A"), gdje je 1 primjer broja retka, "A" je primjer slovna oznaka stupac Rem -= Navedite naziv datoteke i trenutni put do mape u kojoj se pokreće makronaredba =- Neka FileName = FileName + CStr (Worksheets( "DB za ulaznu kontrolu (2)").Cells("1" , ColumnNumber)) + "-" Neka FileName = FileName + CStr (Worksheets( "DB za ulaznu kontrolu (2)").Cells("2" , ColumnNumber)) + ".xlsx" NewPath = Replace (ThisWorkbook.FullName, ThisWorkbook.Name, FileName) Application.DisplayAlerts = False "isključi upozorenja Listovi(newSheet.Name).Kopiraj "Kopiraj trenutni list u novu radnu knjigu ActiveWorkbook.SaveAs Filename:=NewPath, _ FileFormat:=51 ActiveWindow.Close Sheets(newSheet.Name).Delete "Brisanje kreiranog lista Application.DisplayAlerts = Istina "Ponovo uključi upozorenja Neka BrojStopca = BrojStopca + 1 petlja Dok BrojStopca<= КонечныйНомерСтолбца End Sub

Pa, zadnja točka u ovoj fazi je da smo ograničeni performansama sustava i s velikim brojem radnji, njihov će izlaz trajati satima. Da bih ubrzao proces, koristim sljedeću opciju: kopiram sadržaj podatkovne tablice u novu tablicu pomoću makronaredbe, on dobije broj (2) u svom nazivu, zatim se pokrene drugi makro, što ubrzava Excel, ali onemogućuje brojne funkcije:

"Ubrzajte Excel tako što ćete onemogućiti sve što vas usporava" Javni Sub AccelerateExcel() "Više ne osvježavamo stranice nakon svake akcije Application.ScreenUpdating = False “Prebacujemo izračune na ručni način rada Application.Calculation = xlCalculationManual "Onemogući događaje Application.EnableEvents = False "Ne prikazuj granice ćelija If Workbooks.Count Then ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False End If "Onemogući statusnu traku Application.DisplayStatusBar = False "Onemogući Excel poruke Application.DisplayAlerts = False End Sub

I nakon što prikažem sve podatke iz obrazaca, pokrećem sličnu makronaredbu gdje istim varijablama dodjeljujem vrijednost true i brišem duplikat lista kako ne bi smetao.

(na temelju materijala s https://habrahabr.ru/post/344956/)

Ako ste česti korisnik MS Excela, vjerojatno morate svaki dan izvoditi istu vrstu operacija. U ovom slučaju makronaredbe programa Excel pomoći će vam da snimite niz radnji kao skup VBA naredbi. Ova je metoda savršena za automatizaciju jednostavnih zadataka. Za složenije zadatke, korisnici s vještinama programiranja mogu automatizirati operacije pomoću VBA projekata.

Dodatak za automatizaciju nudi potpuno novi pristup automatizaciji rutinskih zadataka u Excelu:

  • Stvaranje naredbi u jednostavnoj Excel proračunskoj tablici umjesto velikih VBA projekata
  • Automatizacija čak i složenih i višefaznih operacija
  • Automatizacija XLTools značajki: SQL upiti, izvoz u CSV, redizajn tablice itd.
  • Stvaranje prilagođenih gumba alatne trake
  • Za napredne korisnike i programere

Ne morate biti stručnjak za VBA. Ako neki od vaših Excel poslovnih procesa oduzimaju previše vremena, naš XLTools tim vam može pomoći u njihovoj automatizaciji.

Dodajte "Automatizaciju" u Excel 2019, 2016, 2013, 2010, 2007

Prikladno za: Microsoft Excel 2019 - 2007, stolni Office 365 (32-bitni i 64-bitni).

Kako raditi s dodatkom:

Kako automatizirati operacije u Excelu bez VBA [Vodič za preuzimanje]

VBA Excel makronaredbe često narastu do stotina redaka koda, što je vrlo nezgodno za korištenje. Dodatak XLTools Automation omogućuje pisanje naredbi u jednostavnim i kompaktnim Excel proračunskim tablicama. Prikaz tablice je informativniji, vizualniji i lakši za uređivanje. Također možete dodati vlastite gumbe na alatnu traku programa Excel za izvođenje vlastitih naredbi automatizacije.

Dodatak za automatizaciju univerzalni je alat za automatizaciju gotovo svih naredbi i njihovih nizova:

  • Automatizacija SQL upita prema Excel tablicama: SELECT, GROUP BY, JOIN ON, itd.
  • Automatski pretvorite zaokretne tablice u ravni popis
  • automatski izvoz Excel tablica u CSV datoteku
  • Automatski izdvajajte podatke iz drugih Excel radnih knjiga ili CSV datoteka
  • Automatsko filtriranje tablica itd.

Samo napišite naredbu pomoću vodiča > Kliknite Pokreni naredbe > Gotovo! Generiranje rezultata trajat će samo nekoliko sekundi.

PREUZMITE PRIRUČNIK: primjeri, predlošci, sintaksa i komentari red po red (zip/xlsx, 260 KB).

Primjer: kako automatizirati SQL upite prema Excel tablicama

Razmotrimo primjer maloprodajne trgovine. Recimo da trebate pripremiti izvješće o prodaji za tromjesečje. Možete koristiti dodatak SQL Queries i postavljati upite izvornim podacima. Ali ako morate redovito pripremati takvo izvješće, ovaj SQL upit može se automatizirati.

1. Pripremite izvorne podatke za SQL upit. Primijenite na njih format tablice, inače SQL neće moći obraditi podatke:

  • Odaberite raspon “Cjenik i evidencija podataka o prodaji”.
  • Na kartici Početna kliknite Oblikuj kao tablicu > Primijeni stil tablice.
  • Na kartici Dizajn tablicu nazovite "Prodaja2014."

2. Dodajte novi list, npr. AutoCommands, i izradite tablicu naredbi SQL automatizacije:

  • XLTools.SQLSelect- unesite naziv tima točno ovako. Ime mora biti u dvije spojene ćelije.
  • SQLQuery - upišite naredbu upita kao i obično. Imajte na umu: dodatak koristi SQLite sintaksu.
    Savjet: Umjesto ručnog upisivanja teksta upita, upotrijebite intuitivni uređivač SQL upita i kopirajte skriptu u tablicu automatizacije.
  • ApplyTableName - unesite naziv tablice rezultata.
    Rezultat upita automatski se generira u obliku tablice. Ako je potrebno, možete kreirati naknadne upite prema njemu.
  • OutputTo - navedite gdje treba smjestiti rezultat upita.

Pažnja: Kako biste bili sigurni da SQL prepoznaje sve reference, nemojte koristiti razmake u imenima radnih listova, radnih knjiga i tablica.

3. Pokrenite SQL automatizaciju naredbe:

  • Označite raspon naredbi automatizacije > kliknite gumb Pokreni naredbe na kartici XLTools.
  • Gotovo, rezultat će biti generiran za nekoliko sekundi.
    U ovom primjeru, SQL upit je dohvatio podatke za 3. kvartal 2014.

4. Izradite vlastite gumbe alatne trake programa Excel.

U svakoj Excel radnoj knjizi možete stvoriti do 3 prilagođena gumba povezana s vašim vlastitim naredbama automatizacije:

  • Kliknite "Stvori gumbe" na kartici XLTools.
  • Dajte gumbu naziv, npr. “Tromjesečno izvješće” > Navedite raspon tablice naredbi.
  • Kliknite Spremi > Vaš gumb će se pojaviti na kartici XLTools.

Sada možete jednostavno izraditi tromjesečno izvješće samo jednim klikom.

Imate pitanja ili prijedloga? Ostavite komentar ispod.

Ovaj članak posvećen je temi koja možda nije nova, ali je, kako pokazuju pisma čitatelja, još uvijek relevantna - automatizacija Microsoft Office aplikacija. Mnogi programeri, dok rade na svojim projektima (bez obzira na razvojni alat - Delphi, C++Builder, Visual Basic...) često koriste usluge koje nudi Microsoft Office, na primjer, izrađuju zaokretne tablice i grafikone koristeći Microsoft Excel, generiraju i ispis dokumenata pomoću programa Microsoft Word itd. Često korisnici koji su navikli koristiti Microsoft Office aplikacije u svakodnevnom radu inzistiraju na korištenju takvih servisa u aplikacijama ili jednostavno na spremanju izvješća i drugih dokumenata u nekom od Microsoft Office formata. Imajte na umu da potencijalne želje ove vrste Microsoft već duže vrijeme uzima u obzir - gotovo sve što korisnik bilo koje Microsoft Office aplikacije može učiniti pomoću izbornika, tipkovnice i alatne trake može učiniti automatski, odnosno ili iz VBA programa ili iz aplikacije kreirane pomoću nekog od razvojnih alata. Drugim riječima, aplikacije Microsoft Officea mogu se programirati. Programabilnost općenito znači sposobnost upravljanja određenom aplikacijom pomoću makro jezika ili pomoću drugih aplikacija. Sve komponente Microsoft Officea podržavaju isti makro jezik: Visual Basic za aplikacije (VBA), koji vam omogućuje stvaranje aplikacija izravno unutar Office dokumenata (ovo se naziva "rješenja temeljena na Microsoft Officeu"). Upravljanje Office komponentama iz drugih aplikacija provodi se pomoću automatizacije (Automation, ranije OLE Automation) - sve Microsoft Office aplikacije su poslužitelji za automatizaciju (ili COM poslužitelji). Za izradu takvih aplikacija prikladni su svi razvojni alati koji vam omogućuju stvaranje kontrolera automatizacije (COM klijenata). U tu svrhu najčešće se koristi Visual Basic, ali može biti i Delphi, C++Builder i Visual C++. Međutim, prije rasprave o mogućnostima određenih razvojnih alata, trebali biste razumjeti što je automatizacija.

Ukratko o automatizaciji

Automatizacija je jedna od mogućnosti koju pruža tehnologija Microsoft COM (Component Object Model). Ne ulazeći u detalje implementacije ove tehnologije, napominjemo da je koriste aplikacije (zvane COM poslužitelji) kako bi drugim aplikacijama (zvane COM klijenti) omogućile pristup svojim objektima, kao i svojstvima i metodama tih objekata. ), koji također mogu biti razvojni alati. Na primjer, program za obradu teksta, budući da je COM poslužitelj, može omogućiti drugim aplikacijama pristup dokumentu, odlomku ili knjižnoj oznaci pomoću odgovarajućih objekata. Za imenovanje (i identifikaciju) COM poslužitelja obično se koriste posebne oznake nizova - programski identifikatori (ProgID). Oni su potrebni kako bi operacijski sustav pomoću ovih identifikatora mogao odrediti u kojem se direktoriju (ili na kojem računalu u lokalnoj mreži, ako se koristi jedna ili druga metoda udaljenog pristupa poslužitelju) nalazi izvršna datoteka poslužitelja automatizacije, i pokrenite ga za izvršenje. O tome koji se točno programski identifikatori koriste za pojedinu Microsoft Office aplikaciju bit će riječi u odjeljcima posvećenim tim aplikacijama.

S programskog gledišta, objekti automatizacije se ne razlikuju mnogo od običnih objekata koji su nam poznati iz teorije i prakse objektno orijentiranog programiranja. Kao i obični objekti, oni imaju svojstva i metode. Svojstvo je karakteristika objekta; na primjer, svojstvo odlomka (Paragraph object) može biti njegov Style. Metoda je radnja koja se može izvesti na objektu (na primjer, možete spremiti dokument pomoću metode SaveAs objekta Document).

Često poslužitelji za automatizaciju sadrže skupove objekata iste vrste, koji se nazivaju zbirkama. Na primjer, program za obradu teksta može sadržavati zbirku dokumenata, a svaki dokument može sadržavati zbirku odlomaka.

Kako mogu saznati koji su objekti dostupni na poslužiteljima za automatizaciju? U tu svrhu svaki poslužitelj za automatizaciju uključuje dokumentaciju i datoteke pomoći koje opisuju njegov objektni model. Ako uzmemo Microsoft Office 2000 aplikacije, onda su to datoteke pomoći za programere koji koriste Visual Basic za aplikacije VBAxxx9.CHM (za Microsoft Office 97 - VBxxx8.HLP, odnosno). Imajte na umu da nisu instalirani prema zadanim postavkama, jer su potrebni programerima, a ne običnim korisnicima.

Sve informacije o objektu koje zahtijevaju kontroleri automatizacije sadržane su u bibliotekama tipova. Biblioteke tipa pohranjene su u posebnom binarnom formatu i obično su predstavljene kao datoteke s ekstenzijama *.olb ili *.tlb, a mogu biti sadržane i unutar izvršnih datoteka (*.exe) ili dinamički učitavanih biblioteka (*.dll). Biblioteke tipova mogu se pregledavati pomoću uslužnog programa OleView koji je uključen u Microsoft Platform SDK, a Borlandovi razvojni alati sadrže vlastite uslužne programe za pregled biblioteke tipova.

Za kraj ovog više nego kratkog uvoda u automatizaciju, zadržimo se i na konceptu uvezivanja. Vezanje je način na koji se varijabla ili klasa aplikacije kontrolera odnosi na objekt automatizacije. Postoje dvije takve metode: kasno uvezivanje i rano uvezivanje.

Kasno vezanje znači da se stvarna referenca na objekt u varijabli ili klasi pojavljuje tijekom izvođenja u aplikaciji kontrolera. Ova je metoda obično sporija od prethodnog vezanja, ali je dostupna u svim razvojnim alatima koji vam omogućuju stvaranje automatiziranih kontrolera i manje je osjetljiva na to jesu li svi parametri metode navedeni kada se pozivaju u kodu aplikacije kontrolera. Kod kasnog povezivanja, ispravnost poziva metode provjerava se u trenutku kada su napravljeni, odnosno u fazi izvršavanja aplikacije, a ne u fazi njene kompilacije.

Rano vezanje znači da se stvarna referenca na objekt automatizacije pojavljuje tijekom kompilacije. Stoga, aplikacijski kod kontrolera zahtijeva referencu na biblioteku tipova (ili na poseban modul koji je njeno sučelje), a to dovodi do generiranja klasa u ovoj aplikaciji s istim svojstvima i metodama kao objekti automatizacije, što čini provjera sintakse mogućih naziva metoda tijekom kompajliranja i pristup imenovanim konstantama sadržanim u biblioteci tipova. Imajte na umu, međutim, da ne podržavaju svi razvojni alati koji podržavaju kasno povezivanje i rano povezivanje.

Nakon što smo završili izlet u COM i automatizaciju, vratimo se na pitanje koje je razvojne alate prikladno koristiti za stvaranje kontrolera za automatizaciju.

VBA i alati za razvoj kontrolera automatizacije

Kao što je gore spomenuto, kontroleri za automatizaciju mogu se kreirati pomoću različitih razvojnih alata, a ako već koristite neki od alata koji podržavaju izradu kontrolera za automatizaciju, možete ga koristiti. Jedino što biste trebali učiniti je saznati podržava li vaš razvojni alat prethodno povezivanje ako ga namjeravate koristiti. Primjeri jednostavnih kontrolera za automatizaciju (obično za Microsoft Word ili Microsoft Excel) koji daju ideju o tome kako se pozivaju metode poslužitelja obično se mogu pronaći u većini modernih razvojnih alata.

Možete započeti svladavanje objektnog modela automatiziranog poslužitelja snimanjem potrebnog slijeda radnji u obliku makronaredbe pomoću VBA. Možete stvoriti makronaredbu odabirom Alati | Makro | Snimite novi makro. Pregled rezultirajuće makronaredbe u uređivaču VBA koda obično vam omogućuje da shvatite kako bi trebao izgledati kod koji implementira ovaj niz radnji.

Nakon rasprave o mogućim alatima za razvoj automatiziranih kontrolera, konačno možemo prijeći na same Microsoft Office aplikacije, na njihove objektne modele i njihovu upotrebu. Razvojni alat za sljedeće primjere je Borland Delphi 5, ali budući da oni pružaju niz poziva svojstvima i metodama Microsoft Office objekata, prijenos koda na druge programske jezike ne bi trebao predstavljati posebne poteškoće. Osim ako nije drugačije navedeno, svi primjeri u ovom članku koriste rano vezanje.

Microsoft Office objektni modeli

Kao što je gore spomenuto, aplikacije Microsoft Officea omogućuju kontrolerima automatizacije pristup njihovoj funkcionalnosti putem svog objektnog modela, koji je hijerarhija objekata. Objekti mogu omogućiti pristup drugim objektima putem kolekcija.

Za ilustraciju kako izgleda hijerarhija Microsoft Office objekata, ovdje je mali fragment objektnog modela Microsoft Word (Sl. 1):

Ovdje smo upotrijebili funkcije GetActiveOleObject i CreateOleObject za povezivanje s već pokrenutom kopijom poslužiteljske aplikacije ili za pokretanje nove ako poslužitelj nije pokrenut, što rezultira referencom na odgovarajući objekt aplikacije poslužitelja koji se postavlja u varijablu varijante.

Gornji dio koda kontrolera može izgledati drugačije u drugim razvojnim alatima - nije izravno povezan s metodama Office objekata, jer je određen pravilima za pozivanje standardnih OLE funkcija u Delphiju (s izuzetkom poziva Visible i Quit metode objekta Application). Ali sve što bi trebalo biti umetnuto umjesto komentara "Ovdje se izvode druge radnje s objektima aplikacije Office" trebalo bi izgledati više-manje isto u različitim razvojnim alatima - pomoću stvorene varijable varijable manipuliramo metodama i svojstvima objekta aplikacije.

U zaključku ćemo dati jednu malu napomenu u vezi s brojem parametara metoda objekata automatizacije. Ako se koristi kasno vezanje, broj parametara metode navedenih u kodu ne mora se podudarati s njihovim stvarnim brojem (koji se može pronaći u opisu objektnog modela odgovarajuće aplikacije). U ovom slučaju, sljedeći kod je sasvim prihvatljiv:

iako metoda Quit objekta Application ima parametre u slučaju nekih Microsoft Office aplikacija (primjerice Microsoft Word).

Kada koristite rano vezanje, na primjer, kada kreirate kontrolere koristeći Delphi, trebali biste biti stroži u definiranju parametara - njihov broj i vrsta moraju odgovarati opisu metoda u biblioteci tipova. Na primjer, u slučaju ranog vezanja, ispravan Delphi kod za zatvaranje Word dokumenta sa svim zadanim vrijednostima bio bi:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

Iznimka od ovog pravila je Visual Basic - ovaj razvojni alat omogućuje vam da ne razmišljate o broju parametara metode prilikom pisanja koda.

Nakon što smo razgovarali o općim načelima stvaranja automatiziranih kontrolera i naučili kako se to radi pomoću Borland Delphija, možemo prijeći na razmatranje automatizacije specifičnih Microsoft Office aplikacija. Počnimo s jednom od najpopularnijih komponenti ovog paketa - Microsoft Word.

Identifikatori programa i Microsoft Word objektni model

Sljedeći objekti izravno su dostupni aplikaciji kontrolera:

Svi ostali Word objekti su takozvani interni objekti. To znači da se ne mogu sami stvoriti; stoga se Paragraph objekt ne može kreirati odvojeno od dokumenta koji ga sadrži.

Ako se sjećate da je glavna svrha Worda rad s dokumentima, lako možete razumjeti hijerarhiju njegovog objektnog modela (fragment je prikazan na slici 1). Glavni objekt u njoj, kao i u svim ostalim Microsoft Office aplikacijama, je Application object koji sadrži Documents kolekciju objekata tipa Document. Svaki objekt Document sadrži kolekciju objekata Paragraphs tipa Paragraph, Bookmarks tipa Bookmark, Characters tipa Character itd. Manipulacija dokumentima, odlomcima, simbolima, knjižnim oznakama zapravo se provodi pristupom svojstvima i metodama tih objekata.

U nastavku ćemo pogledati najčešće zadatke povezane s automatizacijom programa Microsoft Word. Ako naiđete na zadatak koji se ne podudara ni s jednim od gore navedenih, možete pokušati pronaći odgovarajući primjer u Visual Basicu u datoteci pomoći VBAWRD9.CHM ili, kao što je gore spomenuto, zapišite potreban niz radnji u obrazac makronaredbe i analizirati njen kod.

Izrada i otvaranje Microsoft Word dokumenata

Za izradu primjera Microsoft Worda možete upotrijebiti gornji kod za stvaranje kontrolera i modificirati ga zamjenom komentara kodom koji manipulira svojstvima i metodama objekta Word.Application. Počet ćemo s izradom i otvaranjem dokumenata.

Možete stvoriti novi Word dokument pomoću metode Dodaj zbirke Dokumenti objekta Application:

App.Documents.Add;

Kako izraditi prilagođeni dokument? Vrlo je jednostavno - trebate navesti naziv predloška kao parametar metode Dodaj:

App.Documents.Add('C:\Program Files\ _ Microsoft Office\Templates\1033\Manual.dot');

Za otvaranje postojećeg dokumenta upotrijebite metodu Otvori zbirke Dokumenti:

App.Documents.Open('C:\MyWordFile.doc');

Imajte na umu da svojstvo ActiveDocument objekta Word.Application ukazuje na trenutno aktivni dokument među jednim ili više otvorenih. Osim toga, dokumentu se može pristupiti po njegovom serijskom broju metodom Stavka; Na primjer, drugom otvorenom dokumentu može se pristupiti ovako:

App.Documents.Item(2)

Imajte na umu da numeriranje članova zbirke u Microsoft Officeu počinje s jedan.

Dokument možete učiniti aktivnim pomoću metode Aktiviraj:

App.Documents.Item(1).Activate;

Sljedeće što biste trebali naučiti je spremiti Word dokument i zatvoriti sam Word.

Spremite, ispišite i zatvorite Microsoft Word dokumente

App.Documents.Item(2).Close;

App.ActiveDocument.Close ;

Metoda Zatvori ima nekoliko izbornih (u slučaju kasnog uvezivanja) parametara koji utječu na pravila za spremanje dokumenta. Prva od njih utječe na to hoće li se promjene napravljene u dokumentu spremiti i uzima tri moguće vrijednosti (preporuča se da se odgovarajuće konstante opisuju u aplikaciji. Vidi listing 2):

Treći parametar ima vrijednost True ili False i utječe na to hoće li se dokument proslijediti sljedećem korisniku e-poštom. Ako vam ova funkcija nije potrebna, možete zanemariti ovu postavku.

Dakle, kada koristite ove parametre, možete zatvoriti dokument, na primjer, ovako:

App.ActiveDocument.Close(wdSaveChanges, _ wdPromptUser) ;

App.ActiveDocument.Save;

Ova metoda također ima nekoliko izbornih (u slučaju kasnog povezivanja) parametara, od kojih je prvi True ako se dokument automatski sprema i False ako želite prikazati dijaloški okvir za dobivanje korisničke potvrde da su promjene spremljene (ako postoje napravljeni su). Drugi parametar utječe na format spremljenog dokumenta, a popis njegovih mogućih vrijednosti podudara se s popisom vrijednosti drugog parametra metode Close.

Podsjećamo vas da možete zatvoriti sam Word pomoću metode Quit objekta Word.Application. Ova metoda općenito ima tri parametra, ista kao i parametri metode Close objekta Document.

Izlaz dokumenta na uređaj za ispis može se izvršiti pomoću metode Ispis objekta Document, na primjer:

App.ActiveDocument.PrintOut;

Ako trebate promijeniti postavke ispisa, trebali biste navesti vrijednosti odgovarajućih parametara metode PrintOut (u slučaju Microsoft Worda ima ih oko dvadeset).

Umetanje teksta i objekata u dokument i oblikovanje teksta

Da biste stvorili odlomke u dokumentu, možete koristiti kolekciju Odlomci objekta Document, koja predstavlja skup odlomaka u određenom dokumentu. Možete dodati novi odlomak pomoću metode Dodaj ove zbirke:

App.ActiveDocument.Paragraphs.Add;

Za umetanje stvarnog teksta u dokument, međutim, ne koristi se objekt Paragraph, već objekt Range, koji predstavlja bilo koji kontinuirani dio dokumenta (uključujući novostvoreni odlomak). Ovaj objekt može se izraditi na različite načine. Na primjer, možete odrediti početne i završne znakove raspona (ako postoje u dokumentu):

Var Rng: varijanta; ... Rng:= App.ActiveDocument.Range(2,4); //2. do 4. znakova

ili označite broj odlomka (na primjer, onaj koji ste upravo stvorili):

Rng:= App.ActiveDocument.Paragraphs.Item(1).Range;

ili označite nekoliko sljedećih odlomaka u nizu:

Rng:= App.ActiveDocument.Range _ (App.ActiveDocument.Paragraphs.Item(3).Range.Start,_ App.ActiveDocument.Paragraphs.Item(5).Range.End)

Tekst možete umetnuti koristeći metode InsertBefore (ispred raspona) ili InsertAfter (nakon raspona) objekta Range, na primjer:

Rng.InsertAfter('Ovo je tekst koji treba umetnuti');

Osim Range objekta, tekst se može umetnuti pomoću Selection objekta koji je svojstvo objekta Word.Application i predstavlja odabrani dio dokumenta (ovaj objekt nastaje kada korisnik mišem odabere dio dokumenta). , a može se izraditi i pomoću aplikacije kontrolera). Sam objekt Selection može se stvoriti primjenom metode Select na objekt Range, na primjer:

Var Sel: Varijanta; ... App.ActiveDocument.Paragraphs.Item(3).Range.Select;

Gornji primjer ističe treći odlomak u trenutnom dokumentu.

Ako želimo umetnuti redak teksta u dokument, bilo umjesto ili prije odabranog dijela teksta, to možemo učiniti pomoću sljedećeg dijela koda:

Var Sel: Varijanta; ... Sel:= App.Selection; Sel.TypeText('Ovo je tekst kojim ćemo zamijeniti _ odabir');

Imajte na umu da ako je svojstvo Options.ReplaceSelection objekta Word.Application True, odabrani tekst bit će zamijenjen novim tekstom (ovo je zadano); ako želite da se tekst umetne ispred odabranog fragmenta, a ne umjesto njega, trebate postaviti ovo svojstvo na False:

App.Options.ReplaceSelection:= False;

Znak za kraj odlomka kada se koristi objekt Selection može se umetnuti pomoću sljedećeg isječka koda:

Sel.TypeParagraph;

Možete primijeniti metode InsertBefore i InsertAfter na objekt Selection, baš kao i na objekt Range. U ovom slučaju, za razliku od prethodnog, zalijepljeni tekst postat će dio odabranog fragmenta teksta.

Korištenjem objekta Selection, koristeći njegovo svojstvo Font i svojstva objekta Font kao što su Bold, Italic, Size,..., možete oblikovati tekst. Na primjer, možete umetnuti redak podebljan na ovaj način:

Sel.Font.Bold:= True; Sel.TypeText(‘Ovo je tekst koji ćemo istaknuti _ podebljanim slovima.’); Sel.Font.Bold:= False; Sel.TypeParagraph;

Za preklapanje unaprijed određenog stila na umetnuti tekst, možete koristiti svojstvo Style istog objekta, na primjer:

Sel.Style:= 'Naslov 1'; Sel.TypeText(‘Ovo je tekst koji će postati _ naslov’); Sel.TypeParagraph;

Word dokumenti često sadrže podatke iz drugih aplikacija. Najjednostavniji način za lijepljenje takvih podataka u dokument je korištenje metode Paste objekta Range:

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Collapse(wdCollapseEnd); Rng.Paste;

Naravno, u ovom slučaju međuspremnik bi već trebao sadržavati podatke koje treba umetnuti.

Ako trebate staviti dio Word dokumenta u međuspremnik, to možete učiniti pomoću metode Kopiraj objekta Range:

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Copy;

Sljedeće što trebate naučiti je pomicanje kursora na željeno mjesto u tekstu, što ćemo učiniti u sljedećem odjeljku.

Pomicanje kursora kroz tekst

Pomoću metode Collapse možete "komprimirati" objekt Range ili Selection objekt, smanjujući njegovu veličinu na nula znakova:

Rng.Collapse(wdCollapseEnd);

Parametar ove metode određuje hoće li se novi objekt Range ili Selection pojaviti na početku ili kraju izvornog fragmenta. Ako koristite kasno vezanje i vaš razvojni alat nije Visual Basic, trebate definirati odgovarajuće konstante u svojoj aplikaciji:

Const wdCollapseStart = $00000001; //novi objekt je na početku fragmenta wdCollapseEnd = $00000000; //novi objekt je na kraju fragmenta

Pokazivač možete pomicati preko teksta pomoću metode Pomicanje objekata Raspon i Odabir. Ova metoda ima dva parametra. Prvi označava u kojim se jedinicama mjeri kretanje - u znakovima (prema zadanim postavkama), riječima, rečenicama, odlomcima itd. Drugi parametar označava koliko jedinica trebate pomaknuti (ovaj broj može biti negativan; prema zadanim postavkama je 1 ) . Na primjer, sljedeći isječak koda:

Rng.Move;

će pomaknuti kursor jedan znak naprijed, i

Rng.Move(wdParagraph,3);

pomaknut će kursor tri paragrafa naprijed. Imajte na umu da ova metoda koristi sljedeće konstante:

Const //Jedinica kretanja je: wdCharacter = $00000001; //znak wdWord = $00000002; //riječ wdSentence = $00000003; //rečenica wdParagraph = $00000004; //odlomak wdStory = $00000006; //dio dokumenta //npr. zaglavlje, //sadržaj, itd.) wdSection = $00000008; //odjeljak wdColumn = $00000009; //stupac tablice wdRow = $0000000A; //redak tablice wdCell = $0000000C; //ćelija tablice wdTable = $0000000F; //stol

Oznake se često koriste za navigaciju kroz tekst. Knjižnu oznaku možete stvoriti na trenutnoj poziciji pokazivača dodavanjem člana zbirke Knjižne oznake objekta Document pomoću metode Dodaj, navodeći naziv knjižne oznake kao parametar, na primjer:

App.ActiveDocument.Bookmarks.Add('MyBookmark');

Možete provjeriti postojanje knjižne oznake u dokumentu pomoću metode Exists i prijeći na nju pomoću metode Goto objekata Document, Range ili Selection:

Rng:= App.ActiveDocument.Goto(wdGoToBookmark, wdGoToNext,'MyBookmark'); Rng.InsertAfter('Tekst umetnut nakon oznake');

Konstantne vrijednosti za ovaj primjer su:

WdGoToBookmark = $FFFFFFFF; //idi na oznaku wdGoToNext = $00000002; //traži sljedeći objekt u tekstu

Imajte na umu da se korištenjem Goto metode možete pomaknuti ne samo na navedenu knjižnu oznaku, već i na druge objekte (crteže, gramatičke pogreške itd.), a smjer kretanja također može biti različit. Stoga je popis konstanti koje se mogu koristiti kao parametri ove metode prilično velik.

Izrada tablica

Postoje dva načina za izradu tablica. Prvi je pozivanje metode Add zbirke Tables objekta Document i uzastopno ispunjavanje ćelija podacima. Ova metoda je prilično spora kada se veže kasno.

Druga metoda, koja je puno brža, je kreiranje teksta iz nekoliko redaka koji sadrže podstringove s razdjelnicima (bilo koji ili gotovo bilo koji znak može se koristiti kao razdjelnik, samo trebate znati da se ne pojavljuje u podacima koji će biti postavljeni u budućoj tablici), a zatim pretvaranje takvog teksta u tablicu pomoću metode ConvertToTable objekta Range. Ispod je primjer stvaranja tablice od tri retka i tri stupca pomoću ove metode (zarez se koristi kao razdjelnik, što je prvi parametar metode ConvertToTable):

Var Rng: varijanta; ... Rng:= App.Selection.Range; Rng.Collapse(wdCollapseEnd); Rng.InsertAfter('1, 2, 3'); Rng.InsertParagraphAfter; Rng.InsertAfter('4,5,6'); Rng.InsertParagraphAfter; Rng.InsertAfter('7,8,9'); Rng.InsertParagraphAfter; Rng.ConvertToTable(‘,’);

Imajte na umu da se izgled tablice može promijeniti korištenjem svojstva Format, kao i korištenjem svojstava kolekcije Columns, koja predstavlja stupce tablice, i kolekcije Rows, koja predstavlja retke tablice objekta Table.

Pristup svojstvima dokumenta

Svojstva dokumenta mogu se dobiti pomoću zbirke BuiltInDocumentProperties objekta Document, na primjer:

Memo1.Lines.Add(‘Name - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties .Value); Memo1.Lines.Add(‘Autor - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties . _ Vrijednost); Memo1.Lines.Add(‘Predložak - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties . _Value)

Konstante potrebne za pristup svojstvima dokumenta po imenu prikazane su u ispisu 3.

Dakle, u ovom odjeljku proučavali smo osnovne operacije koje se najčešće koriste pri automatizaciji Microsoft Worda. Naravno, mogućnosti automatizacije programa Word daleko od toga da budu iscrpljene navedenim primjerima, no nadam se da ćete ih, vođeni osnovnim načelima stvaranja kontrolera programa Word navedenim u ovom članku i odgovarajućoj datoteci pomoći, moći koristiti - već smo vidjeli da to uopće nije složen slučaj.Identifikatori programa i Microsoft Excel objektni model

Postoje tri vrste Excel objekata koji se mogu stvoriti izravno pomoću aplikacije kontrolera. Ovi objekti i njihovi odgovarajući programski identifikatori navedeni su u nastavku.

Svi ostali Excel objekti su takozvani interni objekti.

Mali fragment Microsoft Excel objektnog modela prikazan je na slici 2:

Jezgra Excel objektnog modela je Application objekt koji sadrži kolekciju Workbooks objekata tipa Workbook. Svaki objekt tipa WorkBook sadrži kolekciju objekata WorkSheets tipa WorkSheet, Charts tipa Chart itd. Manipulacija radnim knjigama, njihovim listovima, ćelijama, grafikonima zapravo se provodi pristupom svojstvima i metodama tih objekata.

U nastavku ćemo pogledati najčešće zadatke povezane s Microsoft Excel automatizacijom. Ako naiđete na zadatak koji ne odgovara nijednom od gore navedenog, možete pokušati pronaći odgovarajući primjer Visual Basica u datoteci pomoći VBAXL9.CHM ili, kao u slučaju Microsoft Worda, snimite odgovarajući makro i analizirajte njegov kod .

Pokrenite Microsoft Excel, kreirajte i otvorite radne knjige

Za izradu primjera pomoću Microsoft Excela možete upotrijebiti kod za stvaranje kontrolera koji se nalazi u odjeljku "Opća načela za stvaranje automatiziranih kontrolera", zamjenjujući prvu izjavu u primjeru sa sljedećim:

AppProgID:= 'Excel.Application';

i zamijenite komentare kodom koji manipulira svojstvima i metodama objekta Excel.Application. Imajte na umu, međutim, da povezivanje kontrolera za automatizaciju s postojećom verzijom programa Excel pomoću metode GetActiveOleObject može dovesti do toga da cijela klijentska strana programa Excel bude nevidljiva (to se događa ako postojeća kopija programa Excel radi u načinu rada u kojem njegovo korisničko sučelje nije dostupno ). Razlozi ovakvog ponašanja autoru nisu poznati. Stoga, ako postoji mogućnost da se dogodi takva situacija, bolje je pojednostaviti kod za izradu kontrolera i uvijek kreirati novu kopiju Excela.

Počet ćemo učiti kako izraditi Excel kontrolere stvaranjem i otvaranjem radnih knjiga.

Novu Excel radnu knjigu možete izraditi pomoću metode Dodaj zbirke Radne knjige objekta aplikacije:

App.WorkBooks.Add;

Da biste stvorili radnu knjigu na temelju predloška, ​​navedite njezin naziv kao prvi parametar metode Dodaj:

App.WorkBooks.Add(‘C:\Program Files\Microsoft _ Office\Templates\1033\invoice.xlt');

Također možete koristiti sljedeće konstante kao prvi parametar ove metode:

Const xlWBATChart = $FFFFEFF3; //radna knjiga sastoji se od lista s dijagramom xlWBATWorksheet = $FFFFEFB9; //radna knjiga se sastoji od lista s podacima

U ovom slučaju, radna knjiga će sadržavati jedan list tipa koji je specificiran navedenom konstantom (graf, obični list s podacima, itd.)

Za otvaranje postojećeg dokumenta upotrijebite metodu Otvori zbirke Radne knjige:

App.Documents.Open('C:\MyExcelFile.xls');

Imajte na umu da svojstvo ActiveWorkBook objekta Excel.Application označava trenutno aktivnu radnu knjigu među jednom ili više otvorenih. Osim toga, radnoj knjizi se može pristupiti putem njenog serijskog broja, na primjer, drugoj otvorenoj radnoj knjizi može se pristupiti ovako:

App.Radne bilježnice

Imajte na umu da se u Delphiju, kada se koristi kasno vezanje, sintaksa koja se koristi za pristup članovima zbirke Excel objekata razlikuje od sintakse koja se koristi za pristup Word objektima - u slučaju Worda koristili smo metodu Item, a u slučaju Excela mi pristupa kolekcijama članova kao da su elementi niza. Međutim, ako koristite Visual Basic, sintaksa koja se koristi za pristup članovima zbirke ista je za sve zbirke Microsoft Officea.

Radnu knjigu možete učiniti aktivnom pomoću metode Aktiviraj:

App.WorkBooks.Activate;

Sljedeće što biste trebali naučiti je spremati radne knjige u datoteke.

Spremanje, ispis i zatvaranje Microsoft Excel radnih knjiga

Zatvaranje dokumenta može se izvršiti metodom Zatvori:

App.WorkBooks.Close;

App.ActiveWorkBook.Close;

Metoda Zatvori ima nekoliko izbornih (u slučaju kasnog povezivanja) parametara koji utječu na pravila za spremanje radne knjige. Prvi parametar ima vrijednost True ili False i utječe na to hoće li se promjene napravljene u radnoj knjizi spremiti. Drugi parametar (Variant type) je naziv datoteke u koju će se spremiti radna knjiga (ako su u njoj napravljene promjene). Treći parametar, također True ili False, utječe na to hoće li se dokument proslijediti sljedećem korisniku putem e-pošte i može se zanemariti ako se ova funkcija ne koristi.

App.ActiveWorkBook.Close(True,’C:\MyWorkBook.xls’);

App.ActiveWorkBook.Save;

App.ActiveWorkBook.SaveAs('C:\MyWorkBook.xls');

Metoda SaveAs ima više od desetak parametara koji utječu na to kako će se dokument spremati (pod kojim imenom, sa ili bez lozinke, koja je kodna stranica za tekst koji sadrži itd.).

Sam Excel možete zatvoriti pomoću metode Quit objekta Excel.Application. U slučaju Excela, ova metoda nema parametara.

Izlaz Excel dokumenta na uređaj za ispis može se izvršiti korištenjem metode PrintOut objekta WorkBook, na primjer:

App.ActiveWorkBook.PrintOut;

Ako trebate promijeniti postavke ispisa, morate navesti vrijednosti odgovarajućih parametara metode PrintOut (u slučaju Excela, ima ih osam).

Pristup listovima i ćelijama

Listovima u radnoj knjizi pristupa se pomoću zbirke WorkSheets objekta WorkBook. Svaki član ove zbirke predstavlja objekt WorkSheet. Član ove zbirke može se nazvati brojem indeksa, na primjer:

App.WorkBooks.WorkSheets.Name:= _ 'Stranica 1';

Gornji primjer ilustrira kako možete promijeniti naziv lista radne knjige.

Također se možete pozvati na list radne bilježnice po imenu, na primjer:

App.WorkBooks.WorkSheets['Sheet1'].Name:= _ 'Page 1';

Pojedinačnim ćelijama radnog lista pristupa se pomoću zbirke Ćelije objekta WorkSheet. Na primjer, možete dodati podatke u ćeliju B1 na sljedeći način:

App.WorkBooks.WorkSheets['Sheet1'].Cells.Value:='25';

Ovdje prva od koordinata ćelije pokazuje na broj retka, a druga na broj stupca.

Dodavanje formula u ćelije vrši se na sličan način:

App.WorkBooks.WorkSheets['Sheet1'] _ .Cells.Value:= ' =SUM(B1:B2)';

Ćeliju možete očistiti pomoću metode ClearContents.

Tekst u ćelijama formatiran je pomoću svojstava Font i Interior objekta Cell i njihovih podsvojstava. Na primjer, sljedeći isječak koda prikazuje tekst u ćeliji crvenim, podebljanim Courier fontom od 16 točaka na žutoj pozadini:

App.WorkBooks.WorkSheets.Cells.Interior _ .Color:= clYellow; App.WorkBooks.WorkSheets.Cells.Font _ .Color:= clRed; App.WorkBooks.WorkSheets.Cells _ .Font.Name:= 'Courier'; App.WorkBooks.WorkSheets.Cells _ .Font.Size:= 16; App.WorkBooks.WorkSheets.Cells _ .Font.Bold:= True;

ID programa