Tutorial ilustrat despre managementul documentelor. Automatizarea intocmirii documentatiei as-built pentru constructie in Excel Automatizarea intocmirii documentelor in ms excel

03.10.2020 Siguranță


Acest articol este dedicat unui subiect care poate să nu fie nou, dar, după cum arată scrisorile cititorilor, este încă relevant - automatizarea aplicațiilor Microsoft Office. Mulți dezvoltatori sunt în proces de lucru la proiectele lor (indiferent de utilizarea instrumentului de dezvoltare - Delphi, C++Builder, Visual Basic:) folosesc adesea serviciile oferite de Microsoft Office, de exemplu construirea tabele pivot si diagrame cu folosind Microsoft Excel, generarea și tipărirea documentelor folosind Microsoft Word etc. Adesea, utilizatorii care sunt obișnuiți să folosească aplicațiile Microsoft Office în munca lor zilnică insistă să folosească astfel de servicii în aplicații sau pur și simplu să salveze rapoarte și alte documente într-unul dintre formatele Microsoft Birou. Rețineți că potențialele dorințe de acest fel au fost luate în considerare de către Microsoft pentru o perioadă destul de lungă de timp - aproape tot ceea ce folosește un utilizator al oricărei aplicații Microsoft Office. folosind meniul, tastatura și bara de instrumente, se pot face și automat, adică fie dintr-un program VBA, fie dintr-o aplicație creată folosind unul dintre instrumentele de dezvoltare. Cu alte cuvinte, aplicațiile Microsoft Office sunt programabile. Programabilitatea în general înseamnă capacitatea de a controla o anumită aplicație folosind limbaje macro sau folosind alte aplicații. Toate componentele Microsoft Office acceptă același limbaj macro: Visual Basic for Applications (VBA), care vă permite să creați aplicații direct în documentele Office (numite<решения на базе Microsoft Office>). Gestionarea componentelor Office din alte aplicații se realizează prin automatizare (Automation, anterior OLE Automation) - toate aplicațiile Microsoft Office sunt servere de automatizare (sau servere COM). Pentru a crea astfel de aplicații, sunt potrivite orice instrumente de dezvoltare care vă permit să creați controlere de automatizare (clienți COM). Visual Basic este cel mai des folosit în acest scop, dar poate fi și Delphi, C++Builder și Visual C++. Cu toate acestea, înainte de a discuta despre capacitățile anumitor instrumente de dezvoltare, ar trebui să înțelegeți ce este automatizarea.

Pe scurt despre automatizare

Automatizarea este una dintre capabilitățile oferite de tehnologia Microsoft COM (Component Object Model). Fără a intra în detalii despre implementarea acestei tehnologii, observăm că aceasta este folosită de aplicații (numite servere COM) pentru a oferi acces la obiectele lor, precum și la proprietățile și metodele acestor obiecte, la alte aplicații (numite clienți COM). ), care pot fi și instrumente de dezvoltare . De exemplu, un procesor de text, fiind un server COM, poate oferi altor aplicații acces la un document, paragraf sau marcaj folosind obiecte adecvate. Pentru a denumi (și a identifica) serverele COM, sunt utilizate de obicei desemnări speciale de șiruri - identificatori programatici (ProgID). Sunt necesare pentru a sistem de operare ar putea folosi acești identificatori pentru a determina în ce director (sau pe ce computer retea locala, dacă se folosește o metodă sau alta acces de la distanță către server) este localizat fișierul executabil al serverului de automatizare și lansați-l pentru execuție. Exact ce identificatori de program sunt utilizați pentru o anumită aplicație Microsoft Office vor fi discutați în secțiunile dedicate acestor aplicații.

Din punct de vedere al programării, obiectele de automatizare nu sunt foarte diferite de obiectele obișnuite, familiare nouă din teoria și practica programării orientate pe obiecte. La fel ca obiectele obișnuite, ele au proprietăți și metode. O proprietate este o caracteristică a unui obiect; de exemplu, o proprietate a unui paragraf (obiect Paragraph) poate fi stilul acestuia. O metodă este o acțiune care poate fi efectuată asupra unui obiect (de exemplu, puteți salva un document folosind metoda SaveAs a obiectului Document).

Adesea, serverele de automatizare conțin seturi de obiecte de același tip, numite colecții. De exemplu, un procesor de text poate conține o colecție de documente și fiecare document poate conține o colecție de paragrafe.

Cum pot afla ce obiecte sunt disponibile pe serverele de automatizare? În acest scop, orice server de automatizare include documentație și fișiere de ajutor care descriu modelul său obiect. Dacă luăm aplicații Microsoft Office 2000, atunci acestea sunt fișiere de ajutor pentru programatorii care folosesc Visual Basic pentru aplicații VBAxxx9.CHM (pentru Microsoft Office 97 - respectiv VBxxx8.HLP). Rețineți că acestea nu sunt instalate implicit, deoarece sunt necesare dezvoltatorilor, nu utilizatorilor obișnuiți.

Toate informațiile despre obiect necesare controlerelor de automatizare sunt conținute în bibliotecile de tipuri. Bibliotecile de tipuri sunt stocate într-un format binar special și sunt de obicei prezentate ca fișiere cu extensii *.olb sau *.tlb și pot fi, de asemenea, conținute în fișiere executabile(*.exe) sau biblioteci încărcate dinamic (*.dll). Bibliotecile de tipuri pot fi vizualizate folosind utilitarul OleView inclus în Microsoft Platform SDK, iar instrumentele de dezvoltare Borland conțin propriile utilitare de vizualizare a bibliotecii de tipuri.

Pentru a încheia această mai mult decât scurtă introducere în automatizare, să ne oprim și asupra conceptului de legare. Legarea este modul în care o variabilă sau o clasă de aplicație controler se referă la un obiect de automatizare. Există două astfel de metode: legarea tardivă și legarea timpurie.

Legarea tardivă înseamnă că referința reală la obiectul din variabilă sau clasă apare în timpul execuției în aplicația controler. Această metodă este de obicei mai lentă decât legarea anterioară, dar este disponibilă în toate instrumentele de dezvoltare care vă permit să creați controlere de automatizare și este mai puțin sensibilă dacă toți parametrii metodei sunt listați atunci când sunt apelați în codul aplicației controlerului. Cu legarea tardivă, corectitudinea apelurilor de metodă este verificată în momentul în care acestea sunt efectuate, adică în etapa de execuție a aplicației, și nu în etapa de compilare a acesteia.

Legarea timpurie înseamnă că referința reală la obiectul de automatizare apare în timpul compilării. Prin urmare, codul aplicației controlerului necesită o referire la biblioteca de tipuri (sau la un modul special care este o interfață cu aceasta), iar acest lucru duce la generarea în această aplicație de clase cu aceleași proprietăți și metode ca obiectele de automatizare, ceea ce face verificarea sintaxei numelor posibile de metode în timpul compilării și accesul la constantele numite conținute în biblioteca de tipuri. Rețineți, totuși, că nu acceptă și toate instrumentele de dezvoltare care acceptă legarea tardivă legarea timpurie.

După ce am finalizat excursia în COM și automatizare, să revenim la întrebarea ce instrumente de dezvoltare sunt convenabile de utilizat pentru a crea controlere de automatizare.

Instrumente de dezvoltare VBA și controler de automatizare

După cum am menționat mai sus, controlerele de automatizare pot fi create folosind diverse instrumente de dezvoltare, iar dacă utilizați deja oricare dintre instrumentele care sprijină crearea controlerelor de automatizare, îl puteți utiliza. Singurul lucru pe care ar trebui să-l faceți este să aflați dacă instrumentul dvs. de dezvoltare acceptă pre-linking dacă intenționați să îl utilizați. Exemple de controlere simple de automatizare (de obicei pentru Microsoft Word sau Microsoft Excel), care oferă o idee despre cum sunt numite metodele de server, pot fi găsite de obicei în kitul de distribuție al celor mai moderne instrumente de dezvoltare.

Puteți începe să stăpâniți modelul obiect al unui server automat înregistrând secvența necesară de acțiuni sub forma unei macrocomenzi folosind VBA. Puteți crea o macrocomandă selectând Instrumente | Macro |Înregistrați o nouă macrocomandă. Vizualizarea macrocomenzii rezultate în editorul de cod VBA vă permite de obicei să înțelegeți cum ar trebui să arate codul care implementează această secvență de acțiuni.

După ce am discutat despre posibilele instrumente pentru dezvoltarea controlerelor de automatizare, putem trece în sfârșit la aplicațiile Microsoft Office în sine, la modelele lor obiect și la utilizarea lor. Instrumentul de dezvoltare pentru următoarele exemple este Borland Delphi 5, dar deoarece oferă o secvență de apeluri la proprietățile și metodele obiectelor Microsoft Office, portarea codului în alte limbaje de programare nu ar trebui să prezinte dificultăți deosebite. Dacă nu se menționează altfel, toate exemplele din acest articol folosesc legarea timpurie.

Modele de obiecte Microsoft Office

După cum am menționat mai sus, aplicațiile Microsoft Office oferă controlorilor de automatizare acces la funcționalitatea lor prin modelul său de obiecte, care este o ierarhie de obiecte. Obiectele pot oferi acces la alte obiecte prin colecții.

Pentru a ilustra cum arată ierarhia obiectelor Microsoft Office, iată un mic fragment din modelul obiect Microsoft Word (Fig. 1):

În modelele de obiecte (Fig. 2)

dintre toate aplicațiile Microsoft Office există întotdeauna cele mai multe obiectul principal, accesibil aplicației controler și reprezentând aplicația însăși în curs de automatizare. Pentru toate aplicațiile Microsoft Office, se numește Aplicație, iar multe dintre proprietățile și metodele sale sunt aceleași pentru toate aceste aplicații. Cele pe care le vom folosi cel mai des sunt următoarele:

  1. Proprietatea Visible (disponibilă pe obiectul Aplicație al tuturor aplicațiilor Microsoft Office) permite aplicației să apară pe ecran și în bara de activități; acceptă valorile True ( interfața cu utilizatorul aplicația este disponibilă) sau False (interfața de utilizare a aplicației nu este disponibilă; aceasta este implicită). Dacă trebuie să faci ceva cu Document de birou V fundal Fără a informa utilizatorul despre aceasta, nu puteți accesa această proprietate - în acest caz, aplicația poate fi găsită doar în lista de procese folosind aplicația Task Manager.
  2. Metoda Quit închide aplicația Office. În funcție de aplicația Office pe care o automatizați, aceasta poate avea sau nu setări.

Principii generale pentru crearea controlerelor de automatizare

În general, controlerul de automatizare trebuie să efectueze următoarele acțiuni:

  1. Verificați dacă rulează o copie a aplicației server.
  2. În funcție de rezultatele verificării, lansați o copie a aplicației Office pe care o automatizați sau conectați-vă la o copie existentă.
  3. Faceți fereastra aplicației server vizibilă (în general, acest lucru nu este necesar).
  4. Efectuați unele acțiuni cu aplicația server (de exemplu, creați sau deschideți documente, modificați datele acestora, salvați documente etc.)
  5. Închideți aplicația server dacă o copie a acesteia a fost lansată de acest controler sau deconectați-vă de la aceasta dacă controlerul s-a conectat la o copie existentă.

Codul Delphi corespunzător este afișat în Lista 1.

Aici am folosit funcțiile GetActiveOleObject și CreateOleObject pentru a vă conecta la o copie care rulează deja a aplicației server sau a porni una nouă dacă serverul nu rulează, ceea ce are ca rezultat plasarea unei referințe la obiectul Application al serverului corespunzător în variabila variantă.

Partea de mai sus a codului controlerului poate arăta diferit în alte instrumente de dezvoltare - nu este direct legată de metodele obiectelor Office, deoarece este determinată de regulile de apelare a funcțiilor OLE standard în Delphi (cu excepția apelurilor la Visible). și metodele Quit ale obiectului Aplicație). Și iată tot ce ar trebui introdus în loc de comentariu<Здесь выполняются другие действия с объектами приложения Office>, în diferite instrumente de dezvoltare ar trebui să arate mai mult sau mai puțin la fel - folosind variabila variantă creată, manipulăm metodele și proprietățile obiectului Aplicație.

În concluzie, vom face o mică remarcă cu privire la numărul de parametri ai metodelor obiect de automatizare. În caz de utilizare legarea tardivă numărul parametrilor de metodă specificati în cod nu trebuie să coincidă cu numărul lor adevărat (care poate fi găsit în descrierea modelului obiect al aplicației corespunzătoare). În acest caz, următorul cod este destul de acceptabil:

deși metoda Quit a obiectului Application are parametri în cazul unor aplicații Microsoft Office (de exemplu, Microsoft Word).

Când utilizați legarea timpurie, de exemplu, când creați controlere folosind Delphi, ar trebui să fiți mai strict în definirea parametrilor - numărul și tipul acestora trebuie să corespundă descrierii metodelor din biblioteca de tipuri. De exemplu, în cazul legării timpurii, codul Delphi corect să se închidă document Word cu valorile implicite ale tuturor parametrilor, va arăta astfel:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

O excepție de la această regulă este Visual Basic - acest instrument de dezvoltare vă permite să nu vă gândiți la numărul de parametri de metodă atunci când scrieți cod.

După ce am discutat principii generale creând controlere de automatizare și după ce am învățat cum se face acest lucru folosind Borland Delphi, putem trece la luarea în considerare a automatizării aplicatii specifice Microsoft Office. Să începem cu una dintre cele mai populare componente ale acestui pachet - Microsoft Word.

Identificatorii programului și modelul obiect Microsoft Word

Următoarele obiecte sunt disponibile direct pentru aplicația controler:

Toate celelalte obiecte Word sunt așa-numitele obiecte interne. Aceasta înseamnă că nu pot fi create singure; astfel, un obiect Paragraph nu poate fi creat separat de documentul care îl conține.

Dacă vă amintiți că scopul principal al Word este de a lucra cu documente, puteți înțelege cu ușurință ierarhia modelului său obiect (un fragment din acesta a fost prezentat în Fig. 1). Obiectul principal din acesta, ca și în toate celelalte aplicații Microsoft Office, este obiectul Application, care conține colecția Documents de obiecte de tip Document. Fiecare obiect Document conține o colecție de obiecte Paragraphs de tip Paragraph, Bookmarks de tip Bookmark, Characters de tip Character etc. Manipularea documentelor, paragrafelor, simbolurilor, marcajelor se realizează de fapt prin accesarea proprietăților și metodelor acestor obiecte.

Mai jos vom analiza cele mai frecvente sarcini legate de Automatizare Microsoft Cuvânt. Dacă întâmpinați o sarcină care nu coincide cu niciuna dintre cele de mai sus, puteți încerca să găsiți un exemplu potrivit în Visual Basic în fișierul de ajutor VBAWRD9.CHM sau, așa cum sa menționat mai sus, notați secvența necesară de acțiuni în formularul a unei macro și analiza codul acesteia.

Crearea și deschiderea documentelor Microsoft Word

Pentru a crea exemple folosind Microsoft Word poate folosi codul de creare a controlerului de mai sus și îl poate modifica prin înlocuirea comentariilor cu cod care manipulează proprietățile și metodele obiectului Word.Application. Vom începe prin a crea și deschide documente.

Crea document nou Word se poate face folosind metoda Add a colecției Documents a obiectului Aplicație:

App.Documents.Add;

Cum se creează un document personalizat? Este foarte simplu - trebuie să specificați numele șablonului ca parametru al metodei Add:

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

Pentru a deschide un document existent, utilizați metoda Open a colecției Documente:

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

Rețineți că proprietatea ActiveDocument a obiectului Word.Application indică documentul activ în prezent printre unul sau mai multe documente deschise. În plus, un document poate fi accesat prin numărul de serie folosind metoda Itemului; de exemplu la al doilea document deschis il poti contacta astfel:

Element.Documente.aplicație(2)

Rețineți că numerotarea membrilor colecției în Microsoft Office începe cu unul.

Puteți activa un document folosind metoda Activare:

App.Documents.Item(1).Activate;

Următorul lucru pe care ar trebui să-l învățați este să salvați documentul Word și să închideți Word însuși.

Salvați, imprimați și închideți documentele Microsoft Word

App.Documents.Item(2).Închidere;

App.ActiveDocument.Close ;

Metoda Close are mai mulți parametri opționali (în cazul legăturii tardive) care afectează regulile de salvare a documentului. Prima dintre ele afectează dacă modificările aduse documentului sunt salvate și ia trei valori posibile (se recomandă ca constantele corespunzătoare să fie descrise în aplicație. Consultați Lista 2):

Al treilea parametru ia valoarea True sau False și afectează dacă documentul este redirecționat către următorul utilizator prin e-mail. Dacă nu aveți nevoie de această funcționalitate, puteți ignora această setare.

Astfel, atunci când utilizați acești parametri, puteți închide documentul, de exemplu, astfel:

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

App.ActiveDocument.Save;

Această metodă are, de asemenea, câțiva parametri opționali (în cazul legăturii cu întârziere), primul dintre care este True dacă documentul este salvat automat și False dacă doriți să scoateți panoul de dialog pentru a primi confirmarea utilizatorului pentru a salva modificările (dacă au fost făcute). Al doilea parametru afectează formatul documentului salvat, iar lista de valori posibile coincide cu lista de valori a celui de-al doilea parametru al metodei Close.

Vă reamintim că puteți închide Word însuși folosind metoda Quit a obiectului Word.Application. Această metodă are în general trei parametri, la fel ca și parametrii metodei Close a obiectului Document.

Ieșirea unui document către un dispozitiv de imprimare se poate face folosind metoda PrintOut a obiectului Document, de exemplu:

App.ActiveDocument.PrintOut;

Dacă trebuie să modificați setările de imprimare, ar trebui să specificați valorile parametrilor corespunzători metodei PrintOut (în cazul Microsoft Word există aproximativ douăzeci).

Inserarea textului și a obiectelor într-un document și formatarea textului

Pentru a crea paragrafe într-un document, puteți utiliza colecția Paragrafe a obiectului Document, care reprezintă un set de paragrafe dintr-un document dat. Puteți adăuga un nou paragraf folosind metoda Add a acestei colecții:

App.ActiveDocument.Paragraphs.Add;

Pentru a insera textul real într-un document, totuși, nu este folosit obiectul Paragraf, ci obiectul Range, care reprezintă orice parte continuă a documentului (inclusiv paragraful nou creat). Acest obiect poate fi creat căi diferite. De exemplu, puteți specifica caracterele de început și de sfârșit ale unui interval (dacă există în document):

Var Rng: Varianta; ... Rng:= App.ActiveDocument.Range(2,4); //al 2-lea până la al 4-lea caracter

sau indicați numărul paragrafului (de exemplu, cel pe care tocmai l-ați creat):

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

sau indicați mai multe paragrafe care urmează la rând:

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

Puteți insera text folosind metodele InsertBefore (înainte de interval) sau InsertAfter (după interval) ale obiectului Range, de exemplu:

Rng.InsertAfter("Acesta este textul care trebuie inserat");

Pe lângă obiectul Range, textul poate fi inserat folosind obiectul Selection, care este o proprietate a obiectului Word.Application și reprezintă partea selectată a documentului (acest obiect este creat atunci când utilizatorul selectează o parte a documentului cu mouse-ul și poate fi creat și folosind aplicația controler). Obiectul Selection în sine poate fi creat prin aplicarea metodei Select la obiectul Range, de exemplu:

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

Exemplul de mai sus evidențiază al treilea paragraf din documentul curent.

Dacă dorim să inserăm o linie de text într-un document, fie în loc de, fie înaintea unei porțiuni de text selectate, putem face acest lucru folosind următoarea bucată de cod:

Var Sel: Varianta; ... Sel:= App.Selection; Sel.TypeText("Acesta este textul cu care vom înlocui _ selecția");

Rețineți că dacă proprietatea Options.ReplaceSelection a obiectului Word.Application este True, textul selectat va fi înlocuit cu noul text (acesta este implicit); dacă doriți ca textul să fie inserat înaintea fragmentului selectat și nu în locul acestuia, ar trebui să setați această proprietate la Fals:

App.Options.ReplaceSelection:= False;

Caracterul de sfârșit de paragraf atunci când utilizați obiectul Selection poate fi inserat folosind următorul fragment de cod:

Sel.TypeParagraph;

Puteți aplica metodele InsertBefore și InsertAfter unui obiect Selection, la fel ca și unui obiect Range. În acest caz, spre deosebire de cel precedent, textul lipit va deveni parte a fragmentului de text selectat.

Cu obiectul Selection, folosind proprietatea Font și proprietățile obiectului Font, cum ar fi Bold, Italic, Size,:, puteți formata textul. De exemplu, astfel puteți insera linia evidențiată cu aldine:

Sel.Font.Bold:= Adevărat; Sel.TypeText("Acesta este textul pe care îl vom evidenția _ cu caractere aldine."); Sel.Font.Bold:= Fals; Sel.TypeParagraph;

Pentru a suprapune un stil predeterminat pe textul inserat, puteți utiliza proprietatea Style a aceluiași obiect, de exemplu:

Sel.Style:= „Titlul 1”; Sel.TypeText("Acesta este textul care va deveni _ titlu"); Sel.TypeParagraph;

Adesea, documentele Word conțin date din alte aplicații. Cel mai simplu mod inserați astfel de date într-un document - utilizați metoda Paste a obiectului Range:

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

Desigur, în acest caz, clipboard-ul ar trebui să conțină deja datele care trebuie inserate.

Dacă trebuie să plasați o parte a unui document Word în clipboard, puteți face acest lucru folosind metoda Copy a obiectului Range:

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

Următorul lucru pe care trebuie să-l învățați este să mutați cursorul în locul dorit din text, ceea ce vom face în secțiunea următoare.

Deplasarea cursorului prin text

Folosind metoda Collapse, puteți<сжать>Obiect Range sau obiect Selection, reducându-și dimensiunea la zero caractere:

Rng.Collapse(wdCollapseEnd);

Parametrul acestei metode specifică dacă fragmentul sursă va fi la început sau la sfârșit. obiect nou Interval sau selecție. Dacă utilizați legarea tardivă și instrumentul de dezvoltare nu este Visual Basic, trebuie să definiți constantele adecvate în aplicația dvs.:

Const wdCollapseStart = $00000001; //obiectul nou este la începutul fragmentului wdCollapseEnd = $00000000; //Obiectul nou este la sfârșitul fragmentului

Puteți muta cursorul peste text folosind metoda Mutare a obiectelor Range și Selection. Această metodă are doi parametri. Primul indică în ce unități se măsoară mișcarea - în caractere (implicit), cuvinte, propoziții, paragrafe etc. Al doilea parametru indică câte unități trebuie să mutați (acest număr poate fi negativ; implicit este 1 ) . De exemplu, următorul fragment de cod:

Rng.Move;

va muta cursorul înainte cu un caracter și

Rng.Move(wdParagraph,3);

va muta cursorul înainte cu trei paragrafe. Rețineți că această metodă utilizează următoarele constante:

Const //Unitatea de mișcare este: wdCharacter = $00000001; //caracter wdWord = $00000002; //cuvântul wdSentence = $00000003; //propoziție wdParagraph = $00000004; //paragraf wdStory = $00000006; //parte a documentului //de exemplu, antet, //cuprins etc.) wdSection = $00000008; //secțiunea wdColumn = $00000009; //coloana tabelului wdRow = $0000000A; //rând tabel wdCell = $0000000C; //celula tabelului wdTable = $0000000F; //masa

Marcajele sunt adesea folosite pentru a naviga prin text. Puteți crea un marcaj la poziția curentă a cursorului adăugând un membru al colecției Bookmarks a obiectului Document folosind metoda Add, specificând numele marcajului ca parametru, de exemplu:

App.ActiveDocument.Bookmarks.Add(„Marca mea”);

Puteți verifica existența unui marcaj într-un document utilizând metoda Exists și puteți trece la acesta folosind metoda Goto a obiectelor Document, Range sau Selection:

Rng:= App.ActiveDocument.Goto(wdGoToBookmark, wdGoToNext,"MyBookmark"); Rng.InsertAfter("Text introdus după marcaj");

Valorile constante pentru acest exemplu sunt:

WdGoToBookmark = $FFFFFFFF; //mergi la marcaj wdGoToNext = $00000002; //căutați următorul obiect din text

Rețineți că folosind metoda Goto vă puteți deplasa nu numai la marcajul specificat, ci și la alte obiecte (desene, erori gramaticale etc.), iar direcția de mișcare poate fi, de asemenea, diferită. Prin urmare, lista de constante care pot fi folosite ca parametri aceasta metoda, destul de mare.

Crearea de tabele

Există două moduri de a crea tabele. Primul este să apelați metoda Add a colecției de tabele a obiectului Document și să umpleți secvențial celulele cu date. Această metodă este destul de lentă când este legată târziu.

A doua cale este mult mai mult<быстрый>, constă în crearea textului din mai multe rânduri care conțin subșiruri cu delimitatori (orice sau aproape orice caracter poate fi folosit ca delimitator, trebuie doar să știi că nu apare în datele care vor fi plasate în viitorul tabel), iar apoi conversia unui astfel de text în tabel folosind metoda ConvertToTable a obiectului Range. Mai jos este un exemplu de creare a unui tabel de trei rânduri și trei coloane folosind această metodă (o virgulă este folosită ca delimitator, care este primul parametru al metodei ConvertToTable):

Var Rng: Varianta; ... 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(",");

Rețineți că aspect tabelele pot fi modificate folosind proprietatea Format, precum și folosind proprietățile colecției Columns, care reprezintă coloanele tabelului, și colecția Rows, care reprezintă rândurile tabelului obiectului Table.

Accesarea proprietăților documentului

Proprietățile documentului pot fi obținute folosind colecția BuiltInDocumentProperties a obiectului Document, de exemplu:

Memo1.Lines.Add("Titlu - " + _ App.ActiveDocument.BuiltInDocumentProperties .Value); Memo1.Lines.Add("Author - " + _ App.ActiveDocument.BuiltInDocumentProperties . _ Value); Memo1.Lines.Add("Șablon - " + _ App.ActiveDocument.BuiltInDocumentProperties . _Value)

Constantele necesare pentru a accesa proprietățile documentului după nume sunt afișate în Lista 3.

Deci, în aceasta sectiune Am studiat operațiunile de bază care sunt cel mai des folosite în automatizarea Microsoft Word. Desigur, posibilitățile de automatizare Word sunt departe de a fi epuizate de exemplele date, însă sper că, ghidat de principiile de bază ale creării controlerelor Word descrise în acest articol și fișierul de ajutor corespunzător, le veți putea folosi - am văzut deja că acest lucru nu este deloc dificil.

Există trei tipuri de obiecte Excel care pot fi create direct folosind aplicația controler. Aceste obiecte și identificatorii lor corespunzători de program sunt enumerate mai jos.

Alte obiecte Excel sunt așa-numitele obiecte interne.

Un mic fragment al modelului obiect Microsoft Excel este prezentat în Fig. 2:

Nucleul modelului obiect Excel este obiectul Application, care conține o colecție de obiecte Workbooks de tip WorkBook. Fiecare obiect de tip WorkBook conține o colecție de obiecte WorkSheets de tip WorkSheet, Charts de tip Chart etc. Manipularea registrelor de lucru, a foilor, celulelor, diagramelor acestora se realizează de fapt prin accesarea proprietăților și metodelor acestor obiecte.

Mai jos vom analiza cele mai comune sarcini asociate cu automatizarea Microsoft Excel. Dacă întâlniți o sarcină care nu se potrivește cu niciuna dintre cele de mai sus, puteți încerca să găsiți un exemplu Visual Basic potrivit în fișierul de ajutor VBAXL9.CHM sau, ca și în cazul Microsoft Word, înregistrați macrocomanda corespunzătoare și analizați codul acesteia. .

Lansați Microsoft Excel, creați și deschideți registre de lucru

Pentru a crea exemple folosind Microsoft Excel, puteți utiliza codul de creare a controlerului furnizat în<Общие принципы создания контроллеров автоматизации>, înlocuind prima afirmație din exemplul dat cu următoarea:

AppProgID:= „Excel.Application”;

și înlocuiți comentariile cu cod care manipulează proprietățile și metodele obiectului Excel.Application. Rețineți, totuși, că conectarea unui controler de automatizare la o versiune existentă de Excel folosind metoda GetActiveOleObject poate duce la invizibilitatea întregii părți a clientului Excel (acest lucru se întâmplă dacă copia existentă a Excel rulează într-un mod în care interfața sa de utilizator nu este accesibilă). ). Motivele acestui comportament sunt necunoscute autorului. Prin urmare, dacă există posibilitatea ca o astfel de situație să apară, este mai bine să simplificați codul de creare a controlerului și să creați întotdeauna o nouă copie a Excel.

Vom începe să învățăm cum să creăm controlere Excel prin crearea și deschiderea registrelor de lucru.

Creați o nouă lucrare Caietul de lucru Excel puteți folosi metoda Add a colecției Workbooks a obiectului Application:

App.WorkBooks.Add;

Pentru a crea un registru de lucru bazat pe un șablon, specificați numele acestuia ca prim parametru al metodei Add:

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

De asemenea, puteți utiliza următoarele constante ca prim parametru al acestei metode:

Const xlWBATChart = $FFFFEFF3; //registrul de lucru este format dintr-o foaie cu o diagramă xlWBATWorksheet = $FFFFEFB9; //caietul de lucru este format dintr-o foaie cu date

În acest caz, registrul de lucru va conține o foaie de tipul specificat de constanta specificată (grafic, foaie obișnuită cu date etc.)

Pentru a deschide un document existent, utilizați metoda Open a colecției WorkBooks:

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

Rețineți că proprietatea ActiveWorkBook a obiectului Excel.Application indică registrul de lucru activ în prezent printre unul sau mai multe deschise. În plus, un registru de lucru poate fi accesat prin numărul său de serie, de exemplu, al doilea registru de lucru deschis poate fi accesat astfel:

App.WorkBooks

Rețineți că în Delphi, atunci când este utilizată legarea tardivă, sintaxa utilizată pentru a accesa membrii colecțiilor de obiecte Excel este diferită de sintaxa utilizată pentru a accesa Obiecte cuvânt- in cazul Word am folosit metoda Item, iar in cazul Excel accesam membrii colectiei ca elemente de matrice. Dacă utilizați Visual Basic, totuși, sintaxa utilizată pentru a accesa membrii colecției este aceeași pentru toate colecțiile Microsoft Office.

Puteți activa un registru de lucru folosind metoda Activare:

App.WorkBooks.Activate;

Următorul lucru pe care ar trebui să-l învățați este să salvați registrele de lucru în fișiere.

Salvarea, imprimarea și închiderea registrelor de lucru Microsoft Excel

Închiderea unui document se poate face folosind metoda Close:

App.WorkBooks.Închidere;

App.ActiveWorkBook.Close;

Metoda Close are mai mulți parametri opționali (în cazul legăturii tardive) care afectează regulile de salvare a registrului de lucru. Primul parametru ia valoarea True sau False și afectează dacă modificările aduse registrului de lucru sunt salvate. Al doilea parametru (Tipul Variant) este numele fișierului în care se salvează registrul de lucru (dacă i s-au făcut modificări). Al treilea parametru, de asemenea, Adevărat sau Fals, afectează dacă documentul este redirecționat către următorul utilizator prin e-mail și poate fi ignorat dacă această funcționalitate nu este utilizată.

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

App.ActiveWorkBook.Save;

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

Metoda SaveAs are mai mult de o duzină de parametri care afectează exact modul în care este salvat documentul (sub ce nume, cu sau fără parolă, care este pagina de coduri pentru textul pe care îl conține etc.).

Puteți închide Excel folosind metoda Quit a obiectului Excel.Application. În cazul Excel, această metodă nu are parametri.

Concluzie document Excel la un dispozitiv de imprimare se poate face folosind metoda PrintOut a obiectului WorkBook, de exemplu:

App.ActiveWorkBook.PrintOut;

Dacă trebuie să modificați setările de imprimare, trebuie să specificați valorile parametrilor corespunzători metodei PrintOut (în cazul Excel, sunt opt).

Accesarea foilor și celulelor

Foile dintr-un registru de lucru sunt accesate folosind colecția WorkSheets a obiectului WorkBook. Fiecare membru al acestei colecții reprezintă un obiect WorkSheet. Un membru al acestei colecții poate fi referit prin numărul său de index, de exemplu:

App.WorkBooks.WorkSheets.Name:= _ „Pagina 1”;

Exemplul de mai sus ilustrează modul în care puteți schimba numele unei foi de registru de lucru.

De asemenea, puteți face referire la o foaie de registru de lucru după nume, de exemplu:

App.WorkBooks.WorkSheets[„Sheet1”].Nume:= _ „Pagina 1”;

Celulele individuale ale foii de lucru sunt accesate folosind colecția Cells a obiectului WorkSheet. De exemplu, puteți adăuga date în celula B1 după cum urmează:

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

Aici, prima dintre coordonatele celulei indică numărul rândului, a doua - numărul coloanei.

Adăugarea de formule la celule se face într-un mod similar:

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

Puteți șterge o celulă folosind metoda ClearContents.

Textul din celule este formatat utilizând proprietățile Font și Interior ale obiectului Cell și subproprietățile acestora. De exemplu, următorul fragment de cod afișează textul dintr-o celulă cu font Courier roșu, aldine, cu 16 puncte pe un fundal galben:

App.WorkBooks.WorkSheets.Cells.Interior _ .Culoare:= clGalben; App.WorkBooks.WorkSheets.Cells.Font _ .Color:= clRed; App.WorkBooks.WorkSheets.Cells _ .Font.Name:= „Curier”; App.WorkBooks.WorkSheets.Cells _ .Font.Size:= 16; App.WorkBooks.WorkSheets.Cells _ .Font.Bold:= Adevărat;

ID program

Recenzii despre cursuri de master și traininguri

Un program personal de lecție este doar o mană divină!

Bună ziua, Dmitri! Mi-a plăcut foarte mult să vă iau programul. Mi-a plăcut conținutul (au fost luate în considerare destul de multe situații), organizarea (programul personal de lecție este doar o mană divină!), prezentarea (totul este foarte clar și inteligibil).

Mi-a plăcut mai ales când ai rezolvat probleme în Trăi, le rog mereu profesorilor să gândească cu voce tare, pentru că așa trece logica raționamentului, logica căutării și rezolvării problemelor.

Acum, ca într-o poezie pentru copii:

cum sa scriu bine

nu trebuie să-ți deranjezi prietenul,

nu este nevoie să suni

nu trebuie să așteptați

Sau o poți lua și scrie! ( vă ușurează munca)

Mulţumesc mult!

Tatiana Bogoslavskaya despre pregătirea practică

În februarie 2013, am participat deja la un webinar (blocul „Practician” și „Specialist”) condus de Dmitry.

Antrenamentul din noiembrie 2013 este deja al doilea meu. Va exista o oportunitate și un subiect interesant - cu siguranță voi încerca să particip la următoarele webinarii, pentru că... sunt cu adevărat informative, interesante și, cel mai important, la sfârșitul lor există o revenire sub formă de rezultate de înaltă calitate în muncă.

Nu voi continua cu gânduri, ci doar detalii:

1. Accesibil;

2. O explicație clară a materialului folosind exemple din practică;

3. Răspunsuri prompte și calificate la întrebările care apar în timpul instruirii, în forum și prin e-mail;

4. Pentru a menține „forma” și a consolida abilitățile, recomand cu căldură webinarii și cursuri de master similare în care Dmitry predă.

Andrey Aganin despre pregătirea practică

Aș fi foarte bucuros să particip la un alt antrenament.

Bună ziua, Dmitri!

Multumesc pentru antrenament! Sunt unul dintre cei trei studenți care ți-au finalizat toate sarcinile. A fost foarte interesant și interesant. Unele sarcini s-au dovedit a fi simple, iar altele au fost foarte dificile - aceasta a fost o experiență foarte utilă.Modul de prezentare a materialului s-a dovedit a fi neobișnuit - a fost trimis un videoclip în care a fost evidențiat principalul lucru din sarcină, datorită asta, timpul a fost economisit - poți studia când ai timp. Pe de altă parte, a existat o lipsă de comunicare live în timpul căreia să poată fi adresate întrebări. Aș fi foarte bucuros să particip la un alt training.Stilul tău de predare este să explici lucruri complexe foarte simplu și clar, ceea ce ajută foarte mult la stăpânirea materialului.

Serghei Borzenkov despre pregătirea practică

Grupul nostru a fost unanim)

Ieri, 20 noiembrie 2012, a avut loc primul webinar (sper să nu fie ultimul) condus de Dmitry.

Un pic despre impresiile mele.

1. Chiar și în timp ce studiam lecțiile sale video gratuite, mi-a plăcut foarte mult modul lui de a prezenta materialul. Din propria mea experiență, știu că a avea cunoștințe despre orice problemă și abilitatea de a explica altora sunt DOUĂ diferențe uriașe.

Din fericire, Dmitry are atât experiență bogată, cât și înclinații didactice. Explică totul într-un mod accesibil și ușor de înțeles.

2. În timpul webinarului, el a explicat ce rezultat trebuia obținut și cu tabula rasa a scris o macrocomandă, dând explicații pentru aceasta sau acea comandă. A răspuns la întrebările care au venit de la „elevi”. Aș dori să notez imediat că au fost puține întrebări.

Detalii Categoria: Excel Publicat: 28 decembrie 2017

Automatizarea întocmirii documentației as-built pentru construcție în Excel

Adesea, când se vorbește despre lucrul în aplicații de birou, se referă la folosirea unui PC pe post de mașină de scris și, să fiu sincer, acesta este un înlocuitor destul de costisitor pentru mecanismele fizice dacă nu profitați de capacitățile pe care ni le oferă un PC. Să vorbim despre asta.

Introducere.

După părerea mea, PC-ul a apărut ca un instrument pentru rezolvarea principiului automatizării proceselor de rutină și este al naibii de bun la asta. În plus, dezvoltare programe functionale există o istorie a creării de instrumente pentru transpunerea sarcinilor de urgență în acțiuni de rutină, ca o consecință a aprofundării diviziunii muncii. Cu toate acestea, există zone, inclusiv. și fluxul de documente, unde astăzi un computer este folosit tocmai ca mașină de scris, incl. și pentru că nu au fost realizate evoluții serioase din cauza faptului că salariile oamenilor stau în costuri generale și, ca urmare, nu sunt mari, ceea ce nu se poate spune despre volumele tot mai mari de flux de documente.

Așadar, să vorbim despre construcție, în special despre pregătirea Documentației Executive (denumită în continuare ED).

despre documentația Executivului

Mai precis despre componenta sa textuală. Pe scurt, un ID este un ansamblu de acte, jurnale și alte documente, desene, diagrame care sunt întocmite pentru fiecare etapă și chiar o operațiune (grup de operațiuni) în construcție, pentru a confirma/respinge lucrarea care se execută pentru proiect. Astfel de documente sunt complet șablon, lista acestora, în funcție de tipul lucrării, este reglementată, și se mențin conform programului efectiv de lucru efectuat, formalizând corectitudinea/abaterea lucrării la proiectul aprobat de comisie.

Cea mai mare parte a lucrărilor este închisă sub forma unui certificat de inspecție ascunsă a lucrărilor (aprobat prin ordin al Serviciului Federal de Supraveghere a Mediului, Tehnologic și Nuclear din 26 decembrie 2006 N 1128 (Acum modificat, pus în vigoare la 6 martie 2016 de către ordinul Rostechnadzor din 26 octombrie 2015 nr 42 .Denumit în continuare AOSR).

Date inițiale pentru automatizare.

Prin urmare, vom lua forma AOSR ca bază. Deci, avem un șablon de document în care sunt introduse următoarele informații:

Postfix numărul actului;
- denumirea proiectului de construcție capitală;
- date juridice despre participanții la construcție (Proiectant sau Client; Persoană care execută construcția; Persoană care întocmește documentația de proiect;
Persoana care execută construcția care a efectuat lucrarea supusă verificării; alte persoane.)
- o listă a persoanelor cu numele organizațiilor, funcțiilor și ordinelor care le confirmă atribuțiile;
- denumirea lucrării efectuate;
- timpul de realizare;
- lista lucrărilor incluse în lucrarea efectuată;
- link-uri către documentația tehnică și secțiunile proiectului/documentației tehnice;
- link-uri către diagrame executive, rapoarte de testare (dacă este necesar);
- o listă de materiale utilizate cu link-uri către documente care confirmă conformitatea acestora (pașapoarte, certificate etc.)

Gânduri asupra metodelor fundamentale de rezolvare a problemei

Deci, într-o primă aproximare, puteți crea pur și simplu un tabel vizual în care, prin alocarea câmpurilor corespunzătoare de același tip fiecărui act, vom obține o imagine vizuală a schemei de execuție a lucrării la instalație. Și asta nu este nimic nou. Deci, trebuie să conectăm formularul cu celulele din tabelele de date și există 2 opțiuni:

1. Fuzionare cu Fișier Word
2. Completarea șabloanelor bazate pe Excel folosind macrocomenzi.

Fiecare dintre aceste metode are avantajele și dezavantajele sale, dar... fuziunea face o înlocuire în timp real, apoi am decis să selectez al doilea articol, pe care fuziunea nu îl oferă în timp real și de fiecare dată va fi necesară scoaterea actelor, în cazul corectării datelor, din nou. Acest lucru se datorează faptului că am adesea nevoie de un istoric al acțiunilor mele.

Deci, acum ne confruntăm cu 2 sarcini:

1. Completarea unui șablon bazat pe date tabulare
2. Ce câmpuri trebuie introduse o dată, care se vor schimba din când în când și care câmpuri vor fi diferite în fiecare act.

Rezolvând sarcina nr. 2, vom pune pe o fișă separată datele care vor fi unificate în cadrul obiectului/secțiunii proiectului de construcție - acesta este:

Spoiler

Pe foaia curentă vom completa o singură dată, iar pentru actele rămase vom pune pur și simplu link-uri către aceste valori:

Spoiler

Și domeniile care se vor schimba în fiecare act:

Spoiler

Acum despre comoditate, dacă notați numele persoanelor responsabile, organizarea lor, ordinea numirii cu data, apoi folosind instrumentul „verificarea datelor” puteți introduce numele lor în spoiler și utilizați formula pentru a trage sus regaliile lor.

DACA EROARE(INDIRECT(CONCATENATE( ""Date pentru proiect"!";ADRESA((POTRIVIRE(E30 ; „Date pentru proiect”!$G$15:$G$34;0 ))+14 ;6 )));"-" )

Acestea. pe foaia „Date proiect” în intervalul $G$15:$G$34, în a 6-a coloană căutăm valoarea în celula E30, iar de îndată ce o găsim folosind o metodă simplă o convertim la o adresă care va să fie convertit într-o legătură folosind formule.

Noua problemă se bazează deja pe lungimea liniei, dacă utilizați fontul Times New Roman nr. 10, atunci lungimea textului care va fi tipărit nu depășește 105 caractere. Acestea. întâlnim nevoia de a crea o cârjă pentru transferuri. Deci, codul funcției în VBA:

Funcția PatrOfString(StringOfTable As String , Nnumber As Byte) As String Dim ArrayBlocks (1 la 10 ) As String Dim i As Integer " Dim j As Integer " Dim k As Integer " Dim p As Integer " Pentru i = 1 la 10 Let ArrayBlocks (i) = " " Următorul i Fie k = 1 Fie p = Len (StringOfTable) Fie p1 = Len (StringOfTable) Pentru i = 1 La rotunjire (Len (StringOfTable) / 105 ) + 1 Pasul 1 Dacă 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 Atunci j = k + 105 End If Do j = j - 1 Loop While Mid $(StringOfTable, j, 1 )<>" " Fie ArrayBlocks(i) = Mid $(StringOfTable, k, j - k + 1 ) Fie p = p - (j - k + 1 ) Fie k = j + 1 End If End If Next i If Nnumber - 1 > 0 Atunci dacă BlockArray(Nnumber) = BlockArray(Nnumber - 1 ) Atunci BlockArray(Nnumber) = " " End If PatrOfString = BlockArray(Nnumber)

Acestea. Mai întâi luăm textul, apoi decupăm 105 caractere, căutăm primul caracter spațiu de la sfârșit, iar când îl găsim, punem textul în prima linie a matricei, lungimea de la primul caracter la numărul de spatiul gasit. Apoi continuăm operația până când textul se epuizează sau matricea de ieșire devine plină. În această etapă este limitat la 10 linii de memorie. Apoi afișăm conținutul liniei dorite de la 1-10 folosind link-ul. Unul dintre dezavantajele soluției este că memoria este înfundată, iar pentru fiecare nouă solicitare se efectuează o recalculare. Dar cârja funcționează.

Acum rezultatul este într-un șablon AOSR standard. Există din nou 2 opțiuni, fie să atribuiți manual o mapare unei coloane (/rând în cazul datelor localizate orizontal pentru fiecare act), atunci acest lucru va consuma mult timp și va consuma mult resurse pentru a ajusta fiecare șablon nou sau pentru a modifica datele masa. De aceea facem optimizare. Datele pentru fiecare act vor fi aranjate vertical, iar compararea combinației de control de caractere (în latină, deoarece actele în sine sunt în întregime în chirilică) vor fi rânduri cu informații în aceste acte, deci într-o buclă dublă imbricată, căutând caractere de control din text, vom potrivi valoarea cerută din coloană.

Face wb.Worksheets( „Un exemplu de act de control de intrare”).Copy after:=Worksheets(Worksheets.Count) Set newSheet = wb.Worksheets(Worksheets.Count) For x = 1 To 15 Pasul 1 „Privire prin coloanele din foaia „Exemplu de act de control de intrare” Pentru y = 1 până la 71 Pasul 1 „ Parcurgem rândurile din foaia „Exemplu de act de control de intrare” Dacă Sheets(newSheet.Name).Cells(y, 20 ) = 1 Atunci fie k = CStr (Sheets(newSheet.Name).Cells(y, x)) „Căutăm doar dacă este ceva în celulă Dacă k<>"" Apoi Pentru i = 1 La Numărul de DataArray Pasul 1 Fie k = Înlocuire (k, arrDataLinks(i), Worksheets().Cells(i, ColumnNumber)) Next i newSheet.Cells(y, x) = k End If End If Next y Next x „ Dacă doriți să adăugați date noi pentru completarea automată, continuați această listă. " Celulele au coordonate în format Cells(3, 2), unde 3 este un exemplu de număr de rând, 2 este un exemplu de număr de coloană „ Pentru a recunoaște cu ușurință numărul coloanei, puteți activa stilul de legătură R1C1 " (Fișier -> Opțiuni -> Formule -> bifați caseta „Stil link R1C1”) " sau specificați coordonatele în formatul Cells(1, "A"), unde 1 este un exemplu de număr de linie, "A" este un exemplu desemnarea literei coloană Rem -= Specificați numele fișierului și calea curentă către folderul în care este lansată macrocomanda =- Let FileName = FileName + CStr (Worksheets( „DB pentru controlul de intrare (2)”).Cells("1" , ColumnNumber)) + "-" Let FileName = FileName + CStr (Foile de lucru( „DB pentru controlul de intrare (2)”).Cells("2" , ColumnNumber)) + ".xlsx" NewPath = Înlocuire (ThisWorkbook.FullName, ThisWorkbook.Name, FileName) Application.DisplayAlerts = False "Opriți avertismentele Sheets(newSheet.Name).Copy „Copiați foaia curentă într-un registru de lucru nou ActiveWorkbook.SaveAs Filename:=NewPath, _ FileFormat:=51 ActiveWindow.Close Sheets(newSheet.Name).Delete „Ștergerea foii create Application.DisplayAlerts = Adevărat „Reactivați avertismentele Fie ColumnNumber = ColumnNumber + 1 buclă While ColumnNumber<= КонечныйНомерСтолбца End Sub

Ei bine, ultimul punct în această etapă este că suntem limitați de performanța sistemului și cu un număr mare de acte, producția lor va dura ore. Pentru a accelera procesul, folosesc următoarea opțiune: copiez conținutul foii de date într-o foaie nouă folosind o macrocomandă, primește un număr (2) în numele său, apoi este lansată o altă macrocomandă, care accelerează Excel, dar dezactivează o serie de funcționalități:

„Accelerează Excel dezactivând tot ceea ce te încetinește” Public Sub AccelerateExcel() „Nu mai reîmprospătăm paginile după fiecare acțiune Application.ScreenUpdating = Fals „Transferăm calculele în modul manual Application.Calculation = xlCalculationManual „Dezactivați evenimentele Application.EnableEvents = False „Nu afișați marginile celulelor Dacă Workbooks.Count, atunci ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False End If „Dezactivați bara de stare Application.DisplayStatusBar = False „Dezactivați mesajele Excel Application.DisplayAlerts = False End Sub

Și după ce afișez toate datele din formulare, rulez o macrocomandă similară în care atribui valoarea adevărată acelorași variabile și șterg foaia duplicată, astfel încât să nu stea în cale.

(pe baza materialelor de pe https://habrahabr.ru/post/344956/)

Dacă sunteți un utilizator frecvent de MS Excel, probabil că va trebui să efectuați același tip de operațiuni în fiecare zi. În acest caz, macrocomenzile Excel vă vor ajuta să înregistrați o secvență de acțiuni ca un set de comenzi VBA. Această metodă este perfectă pentru automatizarea sarcinilor simple. Pentru sarcini mai complexe, utilizatorii cu abilități de programare pot automatiza operațiunile folosind proiecte VBA.

Suplimentul Automation oferă o abordare fundamental nouă pentru automatizarea sarcinilor de rutină în Excel:

  • Crearea de comenzi într-o simplă foaie de calcul Excel în loc de proiecte mari VBA
  • Automatizarea chiar și a operațiunilor complexe și în mai multe etape
  • Automatizarea caracteristicilor XLTools: interogări SQL, export în CSV, reproiectare tabel etc.
  • Crearea butoanelor personalizate din bara de instrumente
  • Pentru utilizatori avansați și dezvoltatori

Nu trebuie să fii un expert VBA. Dacă unele dintre procesele dvs. de afaceri Excel necesită prea mult timp, echipa noastră XLTools vă poate ajuta la automatizarea acestora.

Adăugați „Automatizare” în Excel 2019, 2016, 2013, 2010, 2007

Potrivit pentru: Microsoft Excel 2019 - 2007, desktop Office 365 (32 de biți și 64 de biți).

Cum se lucrează cu suplimentul:

Cum să automatizezi operațiunile în Excel fără VBA [Ghid de descărcare]

Macrocomenzile VBA Excel cresc adesea la sute de linii de cod, care sunt foarte incomod de utilizat. Suplimentul XLTools Automation vă permite să scrieți comenzi în foi de calcul Excel simple și compacte. Vizualizarea tabelului este mai informativă, mai vizuală și mai ușor de editat. De asemenea, puteți adăuga propriile butoane în bara de instrumente Excel pentru a efectua propriile comenzi de automatizare.

Suplimentul Automation este un instrument universal pentru automatizarea aproape oricăror comenzi și secvențele acestora:

  • Automatizarea interogărilor SQL către tabelele Excel: SELECT, GROUP BY, JOIN ON etc.
  • Convertiți automat tabelele pivot în listă plată
  • exportul automat al tabelelor Excel în fișierul CSV
  • Extrageți automat date din alte registre de lucru Excel sau fișiere CSV
  • Filtrarea automată a tabelelor etc.

Doar scrieți comanda folosind tutorialul > Faceți clic pe Run Commands > Done! Generarea rezultatului va dura doar câteva secunde.

DESCARCĂ MANUALUL: exemple, șabloane, sintaxă și comentarii rând cu linie (zip/xlsx, 260 KB).

Exemplu: cum să automatizezi interogările SQL împotriva tabelelor Excel

Luați în considerare exemplul unui magazin cu amănuntul. Să presupunem că trebuie să pregătiți un raport de vânzări pentru trimestrul respectiv. Puteți utiliza programul de completare SQL Queries și puteți interoga datele sursă. Dar dacă trebuie să pregătiți un astfel de raport în mod regulat, această interogare SQL poate fi automatizată.

1. Pregătiți datele sursă pentru interogarea SQL. Aplicați-le un format de tabel, altfel SQL nu va putea procesa datele:

  • Selectați intervalul „Lista de prețuri și jurnal de date despre vânzări”.
  • În fila Acasă, faceți clic pe Format ca tabel > Aplicați un stil de tabel.
  • În fila Design, denumește tabelul „Vânzări2014”.

2. Adăugați o foaie nouă, de exemplu, AutoCommands și creați un tabel de comenzi de automatizare SQL:

  • XLTools.SQLSelect- introduceți numele echipei exact așa. Numele trebuie să fie în două celule îmbinate.
  • SQLQuery - tastați comanda de interogare ca de obicei. Vă rugăm să rețineți: suplimentul folosește sintaxa SQLite.
    Sfat: În loc să tastați manual textul interogării, utilizați editorul intuitiv de interogări SQL și copiați scriptul în tabelul de automatizare.
  • ApplyTableName - introduceți numele tabelului rezultat.
    Rezultatul interogării este generat automat în format tabel. Dacă este necesar, puteți crea interogări ulterioare împotriva acestuia.
  • OutputTo - specificați unde trebuie plasat rezultatul interogării.

Atenţie: Pentru a vă asigura că SQL recunoaște toate referințele, nu utilizați spații în numele foilor de lucru, registrului de lucru și tabelelor.

3. Rulați comanda de automatizare SQL:

  • Evidențiați o gamă de comenzi de automatizare > Faceți clic pe butonul Run Commands din fila XLTools.
  • Gata, rezultatul va fi generat în câteva secunde.
    În acest exemplu, interogarea SQL a preluat date pentru al treilea trimestru din 2014.

4. Creați propriile butoane din bara de instrumente Excel.

În fiecare registru de lucru Excel, puteți crea până la 3 butoane personalizate asociate cu propriile comenzi de automatizare:

  • Faceți clic pe „Creați butoane” în fila XLTools.
  • Dați butonului un nume, de ex. „Raport trimestrial” > Specificați intervalul tabelului de comandă.
  • Faceți clic pe Salvare > butonul dvs. va apărea în fila XLTools.

Acum puteți crea cu ușurință un raport trimestrial cu un singur clic.

Aveți întrebări sau sugestii? Lasă un comentariu mai jos.

Acest articol este dedicat unui subiect care poate să nu fie nou, dar, după cum arată scrisorile cititorilor, este încă relevant - automatizarea aplicațiilor Microsoft Office. Mulți dezvoltatori, în timp ce lucrează la proiectele lor (indiferent ce instrument de dezvoltare - Delphi, C++Builder, Visual Basic...) folosesc adesea serviciile oferite de Microsoft Office, de exemplu, construind tabele pivot și diagrame folosind Microsoft Excel, generând și tipărirea documentelor folosind Microsoft Word etc. Adesea, utilizatorii care sunt obișnuiți să folosească aplicațiile Microsoft Office în munca lor zilnică insistă să folosească astfel de servicii în aplicații sau pur și simplu să salveze rapoarte și alte documente într-unul dintre formatele Microsoft Office. Rețineți că potențialele dorințe de acest fel au fost luate în considerare de către Microsoft de destul de mult timp - aproape tot ce poate face un utilizator al oricărei aplicații Microsoft Office folosind meniul, tastatura și bara de instrumente se poate face automat, adică fie dintr-o Program VBA sau din aplicație creată folosind unul dintre instrumentele de dezvoltare. Cu alte cuvinte, aplicațiile Microsoft Office sunt programabile. Programabilitatea în general înseamnă capacitatea de a controla o anumită aplicație folosind limbaje macro sau folosind alte aplicații. Toate componentele Microsoft Office acceptă același limbaj macro: Visual Basic for Applications (VBA), care vă permite să creați aplicații direct în documentele Office (aceasta se numește „Soluții bazate pe Microsoft Office”). Gestionarea componentelor Office din alte aplicații se realizează prin automatizare (Automation, anterior OLE Automation) - toate aplicațiile Microsoft Office sunt servere de automatizare (sau servere COM). Pentru a crea astfel de aplicații, sunt potrivite orice instrumente de dezvoltare care vă permit să creați controlere de automatizare (clienți COM). Visual Basic este cel mai des folosit în acest scop, dar poate fi și Delphi, C++Builder și Visual C++. Cu toate acestea, înainte de a discuta despre capacitățile anumitor instrumente de dezvoltare, ar trebui să înțelegeți ce este automatizarea.

Pe scurt despre automatizare

Automatizarea este una dintre capabilitățile oferite de tehnologia Microsoft COM (Component Object Model). Fără a intra în detalii despre implementarea acestei tehnologii, observăm că aceasta este folosită de aplicații (numite servere COM) pentru a oferi acces la obiectele lor, precum și la proprietățile și metodele acestor obiecte, la alte aplicații (numite clienți COM). ), care pot fi și instrumente de dezvoltare . De exemplu, un procesor de text, fiind un server COM, poate oferi altor aplicații acces la un document, paragraf sau marcaj folosind obiecte adecvate. Pentru a denumi (și a identifica) serverele COM, sunt utilizate de obicei desemnări speciale de șiruri - identificatori programatici (ProgID). Sunt necesare pentru ca sistemul de operare să poată, folosind acești identificatori, să determine în ce director (sau pe ce computer din rețeaua locală, dacă se folosește una sau alta metodă de acces la distanță la server) se află fișierul executabil al serverului de automatizare, și lansați-l pentru execuție. Exact ce identificatori de program sunt utilizați pentru o anumită aplicație Microsoft Office vor fi discutați în secțiunile dedicate acestor aplicații.

Din punct de vedere al programării, obiectele de automatizare nu sunt foarte diferite de obiectele obișnuite, familiare nouă din teoria și practica programării orientate pe obiecte. La fel ca obiectele obișnuite, ele au proprietăți și metode. O proprietate este o caracteristică a unui obiect; de exemplu, o proprietate a unui paragraf (obiect Paragraph) poate fi stilul acestuia. O metodă este o acțiune care poate fi efectuată asupra unui obiect (de exemplu, puteți salva un document folosind metoda SaveAs a obiectului Document).

Adesea, serverele de automatizare conțin seturi de obiecte de același tip, numite colecții. De exemplu, un procesor de text poate conține o colecție de documente și fiecare document poate conține o colecție de paragrafe.

Cum pot afla ce obiecte sunt disponibile pe serverele de automatizare? În acest scop, orice server de automatizare include documentație și fișiere de ajutor care descriu modelul său obiect. Dacă luăm aplicații Microsoft Office 2000, atunci acestea sunt fișiere de ajutor pentru programatorii care folosesc Visual Basic pentru aplicații VBAxxx9.CHM (pentru Microsoft Office 97 - respectiv VBxxx8.HLP). Rețineți că acestea nu sunt instalate implicit, deoarece sunt necesare dezvoltatorilor, nu utilizatorilor obișnuiți.

Toate informațiile despre obiect necesare controlerelor de automatizare sunt conținute în bibliotecile de tipuri. Bibliotecile de tip sunt stocate într-un format binar special și sunt de obicei reprezentate ca fișiere cu extensiile *.olb sau *.tlb și pot fi, de asemenea, conținute în fișiere executabile (*.exe) sau biblioteci încărcate dinamic (*.dll). Bibliotecile de tipuri pot fi vizualizate folosind utilitarul OleView inclus în Microsoft Platform SDK, iar instrumentele de dezvoltare Borland conțin propriile utilitare de vizualizare a bibliotecii de tipuri.

Pentru a încheia această mai mult decât scurtă introducere în automatizare, să ne oprim și asupra conceptului de legare. Legarea este modul în care o variabilă sau o clasă de aplicație controler se referă la un obiect de automatizare. Există două astfel de metode: legarea tardivă și legarea timpurie.

Legarea tardivă înseamnă că referința reală la obiectul din variabilă sau clasă apare în timpul execuției în aplicația controler. Această metodă este de obicei mai lentă decât legarea anterioară, dar este disponibilă în toate instrumentele de dezvoltare care vă permit să creați controlere de automatizare și este mai puțin sensibilă dacă toți parametrii metodei sunt listați atunci când sunt apelați în codul aplicației controlerului. Cu legarea tardivă, corectitudinea apelurilor de metodă este verificată în momentul în care acestea sunt efectuate, adică în etapa de execuție a aplicației, și nu în etapa de compilare a acesteia.

Legarea timpurie înseamnă că referința reală la obiectul de automatizare apare în timpul compilării. Prin urmare, codul aplicației controlerului necesită o referire la biblioteca de tipuri (sau la un modul special care este o interfață cu aceasta), iar acest lucru duce la generarea în această aplicație de clase cu aceleași proprietăți și metode ca obiectele de automatizare, ceea ce face verificarea sintaxei numelor posibile de metode în timpul compilării și accesul la constantele numite conținute în biblioteca de tipuri. Rețineți, totuși, că nu toate instrumentele de dezvoltare care acceptă legarea tardivă acceptă și legarea timpurie.

După ce am finalizat excursia în COM și automatizare, să revenim la întrebarea ce instrumente de dezvoltare sunt convenabile de utilizat pentru a crea controlere de automatizare.

Instrumente de dezvoltare VBA și controler de automatizare

După cum am menționat mai sus, controlerele de automatizare pot fi create folosind diverse instrumente de dezvoltare, iar dacă utilizați deja oricare dintre instrumentele care sprijină crearea controlerelor de automatizare, îl puteți utiliza. Singurul lucru pe care ar trebui să-l faceți este să aflați dacă instrumentul dvs. de dezvoltare acceptă pre-linking dacă intenționați să îl utilizați. Exemple de controlere de automatizare simple (de obicei pentru Microsoft Word sau Microsoft Excel) care oferă o idee despre cum sunt numite metodele de server pot fi găsite de obicei în majoritatea instrumentelor de dezvoltare moderne.

Puteți începe să stăpâniți modelul obiect al unui server automat înregistrând secvența necesară de acțiuni sub forma unei macrocomenzi folosind VBA. Puteți crea o macrocomandă selectând Instrumente | Macro |Înregistrați o nouă macrocomandă. Vizualizarea macrocomenzii rezultate în editorul de cod VBA vă permite de obicei să înțelegeți cum ar trebui să arate codul care implementează această secvență de acțiuni.

După ce am discutat despre posibilele instrumente pentru dezvoltarea controlerelor de automatizare, putem trece în sfârșit la aplicațiile Microsoft Office în sine, la modelele lor obiect și la utilizarea lor. Instrumentul de dezvoltare pentru următoarele exemple este Borland Delphi 5, dar deoarece oferă o secvență de apeluri la proprietățile și metodele obiectelor Microsoft Office, portarea codului în alte limbaje de programare nu ar trebui să prezinte dificultăți deosebite. Dacă nu se menționează altfel, toate exemplele din acest articol folosesc legarea timpurie.

Modele de obiecte Microsoft Office

După cum am menționat mai sus, aplicațiile Microsoft Office oferă controlorilor de automatizare acces la funcționalitatea lor prin modelul său de obiecte, care este o ierarhie de obiecte. Obiectele pot oferi acces la alte obiecte prin colecții.

Pentru a ilustra cum arată ierarhia obiectelor Microsoft Office, iată un mic fragment din modelul obiect Microsoft Word (Fig. 1):

Aici am folosit funcțiile GetActiveOleObject și CreateOleObject pentru a vă conecta la o copie care rulează deja a aplicației server sau a porni una nouă dacă serverul nu rulează, ceea ce are ca rezultat plasarea unei referințe la obiectul Application al serverului corespunzător în variabila variantă.

Partea de mai sus a codului controlerului poate arăta diferit în alte instrumente de dezvoltare - nu este direct legată de metodele obiectelor Office, deoarece este determinată de regulile de apelare a funcțiilor OLE standard în Delphi (cu excepția apelurilor la Visible). și metodele Quit ale obiectului Aplicație). Dar tot ceea ce ar trebui inserat în loc de comentariul „Aici sunt efectuate alte acțiuni cu obiecte de aplicație Office” ar trebui să arate mai mult sau mai puțin la fel în diferite instrumente de dezvoltare - folosind variabila variantă creată, manipulăm metodele și proprietățile obiectului Aplicație.

În concluzie, vom face o mică remarcă cu privire la numărul de parametri ai metodelor obiect de automatizare. Dacă se utilizează legarea tardivă, numărul parametrilor de metodă specificati în cod nu trebuie să coincidă cu numărul lor adevărat (care poate fi găsit în descrierea modelului obiect al aplicației corespunzătoare). În acest caz, următorul cod este destul de acceptabil:

deși metoda Quit a obiectului Application are parametri în cazul unor aplicații Microsoft Office (de exemplu, Microsoft Word).

Când utilizați legarea timpurie, de exemplu, când creați controlere folosind Delphi, ar trebui să fiți mai strict în definirea parametrilor - numărul și tipul acestora trebuie să corespundă descrierii metodelor din biblioteca de tipuri. De exemplu, în cazul legării timpurii, codul Delphi corect pentru a închide un document Word cu toate valorile implicite ar fi:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

O excepție de la această regulă este Visual Basic - acest instrument de dezvoltare vă permite să nu vă gândiți la numărul de parametri de metodă atunci când scrieți cod.

După ce am discutat despre principiile generale ale creării controlerelor de automatizare și după ce am învățat cum se face acest lucru folosind Borland Delphi, putem trece la luarea în considerare a automatizării aplicațiilor specifice Microsoft Office. Să începem cu una dintre cele mai populare componente ale acestui pachet - Microsoft Word.

Identificatorii programului și modelul obiect Microsoft Word

Următoarele obiecte sunt disponibile direct pentru aplicația controler:

Toate celelalte obiecte Word sunt așa-numitele obiecte interne. Aceasta înseamnă că nu pot fi create singure; astfel, un obiect Paragraph nu poate fi creat separat de documentul care îl conține.

Dacă vă amintiți că scopul principal al Word este de a lucra cu documente, puteți înțelege cu ușurință ierarhia modelului său obiect (un fragment din acesta a fost prezentat în Fig. 1). Obiectul principal din acesta, ca și în toate celelalte aplicații Microsoft Office, este obiectul Application, care conține colecția Documents de obiecte de tip Document. Fiecare obiect Document conține o colecție de obiecte Paragraphs de tip Paragraph, Bookmarks de tip Bookmark, Characters de tip Character etc. Manipularea documentelor, paragrafelor, simbolurilor, marcajelor se realizează de fapt prin accesarea proprietăților și metodelor acestor obiecte.

Mai jos ne vom uita la cele mai comune sarcini asociate cu automatizarea Microsoft Word. Dacă întâmpinați o sarcină care nu coincide cu niciuna dintre cele de mai sus, puteți încerca să găsiți un exemplu potrivit în Visual Basic în fișierul de ajutor VBAWRD9.CHM sau, așa cum sa menționat mai sus, notați secvența necesară de acțiuni în formularul a unei macro și analiza codul acesteia.

Crearea și deschiderea documentelor Microsoft Word

Pentru a crea exemple de Microsoft Word, puteți utiliza codul de creare a controlerului de mai sus și îl puteți modifica prin înlocuirea comentariilor cu cod care manipulează proprietățile și metodele obiectului Word.Application. Vom începe prin a crea și deschide documente.

Puteți crea un nou document Word folosind metoda Add a colecției Documents a obiectului Aplicație:

App.Documents.Add;

Cum se creează un document personalizat? Este foarte simplu - trebuie să specificați numele șablonului ca parametru al metodei Add:

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

Pentru a deschide un document existent, utilizați metoda Open a colecției Documente:

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

Rețineți că proprietatea ActiveDocument a obiectului Word.Application indică documentul activ în prezent printre unul sau mai multe documente deschise. În plus, un document poate fi accesat prin numărul de serie folosind metoda Itemului; De exemplu, al doilea document deschis poate fi accesat astfel:

Element.Documente.aplicație(2)

Rețineți că numerotarea membrilor colecției în Microsoft Office începe cu unul.

Puteți activa un document folosind metoda Activare:

App.Documents.Item(1).Activate;

Următorul lucru pe care ar trebui să-l învățați este să salvați documentul Word și să închideți Word însuși.

Salvați, imprimați și închideți documentele Microsoft Word

App.Documents.Item(2).Închidere;

App.ActiveDocument.Close ;

Metoda Close are mai mulți parametri opționali (în cazul legăturii tardive) care afectează regulile de salvare a documentului. Prima dintre ele afectează dacă modificările aduse documentului sunt salvate și ia trei valori posibile (se recomandă ca constantele corespunzătoare să fie descrise în aplicație. Consultați Lista 2):

Al treilea parametru ia valoarea True sau False și afectează dacă documentul este redirecționat către următorul utilizator prin e-mail. Dacă nu aveți nevoie de această funcționalitate, puteți ignora această setare.

Astfel, atunci când utilizați acești parametri, puteți închide documentul, de exemplu, astfel:

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

App.ActiveDocument.Save;

Această metodă are, de asemenea, câțiva parametri opționali (în cazul legăturii cu întârziere), primul dintre care este True dacă documentul este salvat automat și False dacă doriți să afișați o casetă de dialog pentru a obține confirmarea utilizatorului că modificările au fost salvate (dacă există au fost facute). Al doilea parametru afectează formatul documentului salvat, iar lista de valori posibile coincide cu lista de valori a celui de-al doilea parametru al metodei Close.

Vă reamintim că puteți închide Word însuși folosind metoda Quit a obiectului Word.Application. Această metodă are în general trei parametri, la fel ca și parametrii metodei Close a obiectului Document.

Ieșirea unui document către un dispozitiv de imprimare se poate face folosind metoda PrintOut a obiectului Document, de exemplu:

App.ActiveDocument.PrintOut;

Dacă trebuie să modificați setările de imprimare, ar trebui să specificați valorile parametrilor corespunzători metodei PrintOut (în cazul Microsoft Word există aproximativ douăzeci).

Inserarea textului și a obiectelor într-un document și formatarea textului

Pentru a crea paragrafe într-un document, puteți utiliza colecția Paragrafe a obiectului Document, care reprezintă un set de paragrafe dintr-un document dat. Puteți adăuga un nou paragraf folosind metoda Add a acestei colecții:

App.ActiveDocument.Paragraphs.Add;

Pentru a insera textul real într-un document, totuși, nu este folosit obiectul Paragraf, ci obiectul Range, care reprezintă orice parte continuă a documentului (inclusiv paragraful nou creat). Acest obiect poate fi creat în diferite moduri. De exemplu, puteți specifica caracterele de început și de sfârșit ale unui interval (dacă există în document):

Var Rng: Varianta; ... Rng:= App.ActiveDocument.Range(2,4); //al 2-lea până la al 4-lea caracter

sau indicați numărul paragrafului (de exemplu, cel pe care tocmai l-ați creat):

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

sau indicați mai multe paragrafe care urmează la rând:

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

Puteți insera text folosind metodele InsertBefore (înainte de interval) sau InsertAfter (după interval) ale obiectului Range, de exemplu:

Rng.InsertAfter('Acesta este textul de inserat');

Pe lângă obiectul Range, textul poate fi inserat folosind obiectul Selection, care este o proprietate a obiectului Word.Application și reprezintă partea selectată a documentului (acest obiect este creat atunci când utilizatorul selectează o parte a documentului cu mouse-ul și poate fi creat și folosind aplicația controler). Obiectul Selection în sine poate fi creat prin aplicarea metodei Select la obiectul Range, de exemplu:

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

Exemplul de mai sus evidențiază al treilea paragraf din documentul curent.

Dacă dorim să inserăm o linie de text într-un document, fie în loc de, fie înaintea unei porțiuni de text selectate, putem face acest lucru folosind următoarea bucată de cod:

Var Sel: Varianta; ... Sel:= App.Selection; Sel.TypeText('Acesta este textul cu care vom înlocui _ selecția');

Rețineți că dacă proprietatea Options.ReplaceSelection a obiectului Word.Application este True, textul selectat va fi înlocuit cu noul text (acesta este implicit); dacă doriți ca textul să fie inserat înaintea fragmentului selectat și nu în locul acestuia, ar trebui să setați această proprietate la Fals:

App.Options.ReplaceSelection:= False;

Caracterul de sfârșit de paragraf atunci când utilizați obiectul Selection poate fi inserat folosind următorul fragment de cod:

Sel.TypeParagraph;

Puteți aplica metodele InsertBefore și InsertAfter unui obiect Selection, la fel ca și unui obiect Range. În acest caz, spre deosebire de cel precedent, textul lipit va deveni parte a fragmentului de text selectat.

Folosind obiectul Selection, folosind proprietatea lui Font și proprietățile obiectului Font, cum ar fi Bold, Italic, Size,..., puteți formata textul. De exemplu, puteți insera o linie cu caractere aldine astfel:

Sel.Font.Bold:= Adevărat; Sel.TypeText(‘Acesta este textul pe care îl vom evidenția _ cu caractere aldine.’); Sel.Font.Bold:= Fals; Sel.TypeParagraph;

Pentru a suprapune un stil predeterminat pe textul inserat, puteți utiliza proprietatea Style a aceluiași obiect, de exemplu:

Sel.Style:= „Titlul 1”; Sel.TypeText(‘Acesta este textul care va deveni _ titlu’); Sel.TypeParagraph;

Adesea, documentele Word conțin date din alte aplicații. Cel mai simplu mod de a lipi astfel de date într-un document este să utilizați metoda Paste a obiectului Range:

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

Desigur, în acest caz, clipboard-ul ar trebui să conțină deja datele care trebuie inserate.

Dacă trebuie să plasați o parte a unui document Word în clipboard, puteți face acest lucru folosind metoda Copy a obiectului Range:

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

Următorul lucru pe care trebuie să-l învățați este să mutați cursorul în locul dorit din text, ceea ce vom face în secțiunea următoare.

Deplasarea cursorului prin text

Folosind metoda Collapse, puteți „comprima” un obiect Range sau un obiect Selection, reducându-i dimensiunea la zero caractere:

Rng.Collapse(wdCollapseEnd);

Parametrul acestei metode specifică dacă noul obiect Range sau Selection va apărea la începutul sau la sfârșitul fragmentului original. Dacă utilizați legarea tardivă și instrumentul de dezvoltare nu este Visual Basic, trebuie să definiți constantele adecvate în aplicația dvs.:

Const wdCollapseStart = $00000001; //obiectul nou este la începutul fragmentului wdCollapseEnd = $00000000; //Obiectul nou este la sfârșitul fragmentului

Puteți muta cursorul peste text folosind metoda Mutare a obiectelor Range și Selection. Această metodă are doi parametri. Primul indică în ce unități se măsoară mișcarea - în caractere (implicit), cuvinte, propoziții, paragrafe etc. Al doilea parametru indică câte unități trebuie să mutați (acest număr poate fi negativ; implicit este 1 ) . De exemplu, următorul fragment de cod:

Rng.Move;

va muta cursorul înainte cu un caracter și

Rng.Move(wdParagraph,3);

va muta cursorul înainte cu trei paragrafe. Rețineți că această metodă utilizează următoarele constante:

Const //Unitatea de mișcare este: wdCharacter = $00000001; //caracter wdWord = $00000002; //cuvântul wdSentence = $00000003; //propoziție wdParagraph = $00000004; //paragraf wdStory = $00000006; //parte a documentului //de exemplu, antet, //cuprins etc.) wdSection = $00000008; //secțiunea wdColumn = $00000009; //coloana tabelului wdRow = $0000000A; //rând tabel wdCell = $0000000C; //celula tabelului wdTable = $0000000F; //masa

Marcajele sunt adesea folosite pentru a naviga prin text. Puteți crea un marcaj la poziția curentă a cursorului adăugând un membru al colecției Bookmarks a obiectului Document folosind metoda Add, specificând numele marcajului ca parametru, de exemplu:

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

Puteți verifica existența unui marcaj într-un document utilizând metoda Exists și puteți trece la acesta folosind metoda Goto a obiectelor Document, Range sau Selection:

Rng:= App.ActiveDocument.Goto(wdGoToBookmark, wdGoToNext,'MyBookmark'); Rng.InsertAfter('Text introdus după marcaj');

Valorile constante pentru acest exemplu sunt:

WdGoToBookmark = $FFFFFFFF; //mergi la marcaj wdGoToNext = $00000002; //căutați următorul obiect din text

Rețineți că folosind metoda Goto vă puteți deplasa nu numai la marcajul specificat, ci și la alte obiecte (desene, erori gramaticale etc.), iar direcția de mișcare poate fi, de asemenea, diferită. Prin urmare, lista constantelor care pot fi utilizate ca parametri ai acestei metode este destul de mare.

Crearea de tabele

Există două moduri de a crea tabele. Primul este să apelați metoda Add a colecției de tabele a obiectului Document și să umpleți secvențial celulele cu date. Această metodă este destul de lentă când este legată târziu.

A doua metodă, care este mult mai rapidă, este să creezi text din mai multe rânduri care conțin subșiruri cu delimitatori (orice sau aproape orice caracter poate fi folosit ca delimitator, trebuie doar să știi că nu apare în datele care vor fi plasate în tabelul viitor) și apoi conversia unui astfel de text într-un tabel utilizând metoda ConvertToTable a obiectului Range. Mai jos este un exemplu de creare a unui tabel de trei rânduri și trei coloane folosind această metodă (o virgulă este folosită ca delimitator, care este primul parametru al metodei ConvertToTable):

Var Rng: Varianta; ... 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(‘,’);

Rețineți că aspectul unui tabel poate fi modificat utilizând proprietatea Format, precum și folosind proprietățile colecției Columns, care reprezintă coloanele tabelului, și a colecției Rows, care reprezintă rândurile tabelului obiectului Table.

Accesarea proprietăților documentului

Proprietățile documentului pot fi obținute folosind colecția BuiltInDocumentProperties a obiectului Document, de exemplu:

Memo1.Lines.Add(‘Nume - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties .Value); Memo1.Lines.Add(‘Author - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties . _ Value); Memo1.Lines.Add(‘Șablon - ‘ + _ App.ActiveDocument.BuiltInDocumentProperties . _Value)

Constantele necesare pentru a accesa proprietățile documentului după nume sunt afișate în Lista 3.

Așadar, în această secțiune am studiat operațiunile de bază care sunt cele mai des folosite la automatizarea Microsoft Word. Desigur, posibilitățile de automatizare Word sunt departe de a fi epuizate de exemplele date, însă sper că, ghidat de principiile de bază ale creării controlerelor Word prezentate în acest articol și fișierul de ajutor corespunzător, le veți putea folosi - am văzut deja că acesta nu este deloc complexul de cazuri.Identificatorii programului și modelul obiect Microsoft Excel

Există trei tipuri de obiecte Excel care pot fi create direct folosind aplicația controler. Aceste obiecte și identificatorii lor corespunzători de program sunt enumerate mai jos.

Toate celelalte obiecte Excel sunt așa-numitele obiecte interne.

Un mic fragment al modelului obiect Microsoft Excel este prezentat în Fig. 2:

Nucleul modelului obiect Excel este obiectul Application, care conține o colecție de obiecte Workbooks de tip WorkBook. Fiecare obiect de tip WorkBook conține o colecție de obiecte WorkSheets de tip WorkSheet, Charts de tip Chart etc. Manipularea registrelor de lucru, a foilor, celulelor, diagramelor acestora se realizează de fapt prin accesarea proprietăților și metodelor acestor obiecte.

Mai jos vom analiza cele mai comune sarcini asociate cu automatizarea Microsoft Excel. Dacă întâlniți o sarcină care nu se potrivește cu niciuna dintre cele de mai sus, puteți încerca să găsiți un exemplu Visual Basic potrivit în fișierul de ajutor VBAXL9.CHM sau, ca și în cazul Microsoft Word, înregistrați macrocomanda corespunzătoare și analizați codul acesteia. .

Lansați Microsoft Excel, creați și deschideți registre de lucru

Pentru a crea exemple folosind Microsoft Excel, puteți utiliza codul de creare a controlerului furnizat în secțiunea „Principii generale pentru crearea controlerelor de automatizare”, înlocuind prima declarație din exemplu cu următoarea:

AppProgID:= 'Excel.Application';

și înlocuiți comentariile cu cod care manipulează proprietățile și metodele obiectului Excel.Application. Rețineți, totuși, că conectarea unui controler de automatizare la o versiune existentă de Excel folosind metoda GetActiveOleObject poate duce la invizibilitatea întregii părți a clientului Excel (acest lucru se întâmplă dacă copia existentă a Excel rulează într-un mod în care interfața sa de utilizator nu este accesibilă). ). Motivele acestui comportament sunt necunoscute autorului. Prin urmare, dacă există posibilitatea ca o astfel de situație să apară, este mai bine să simplificați codul de creare a controlerului și să creați întotdeauna o nouă copie a Excel.

Vom începe să învățăm cum să creăm controlere Excel prin crearea și deschiderea registrelor de lucru.

Puteți crea un nou registru de lucru Excel folosind metoda Add a colecției Workbooks a obiectului Aplicație:

App.WorkBooks.Add;

Pentru a crea un registru de lucru bazat pe un șablon, specificați numele acestuia ca prim parametru al metodei Add:

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

De asemenea, puteți utiliza următoarele constante ca prim parametru al acestei metode:

Const xlWBATChart = $FFFFEFF3; //registrul de lucru este format dintr-o foaie cu o diagramă xlWBATWorksheet = $FFFFEFB9; //caietul de lucru este format dintr-o foaie cu date

În acest caz, registrul de lucru va conține o foaie de tipul specificat de constanta specificată (grafic, foaie obișnuită cu date etc.)

Pentru a deschide un document existent, utilizați metoda Open a colecției WorkBooks:

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

Rețineți că proprietatea ActiveWorkBook a obiectului Excel.Application indică registrul de lucru activ în prezent printre unul sau mai multe deschise. În plus, un registru de lucru poate fi accesat prin numărul său de serie, de exemplu, al doilea registru de lucru deschis poate fi accesat astfel:

App.WorkBooks

Rețineți că în Delphi, când se utilizează legarea tardivă, sintaxa folosită pentru a accesa membrii colecțiilor de obiecte Excel este diferită de sintaxa utilizată pentru a accesa obiectele Word - în cazul Word am folosit metoda Item, iar în cazul Excel accesați colecțiile de membri ca și cum ar fi elemente ale unui tablou. Dacă utilizați Visual Basic, totuși, sintaxa utilizată pentru a accesa membrii colecției este aceeași pentru toate colecțiile Microsoft Office.

Puteți activa un registru de lucru folosind metoda Activare:

App.WorkBooks.Activate;

Următorul lucru pe care ar trebui să-l învățați este să salvați registrele de lucru în fișiere.

Salvarea, imprimarea și închiderea registrelor de lucru Microsoft Excel

Închiderea unui document se poate face folosind metoda Close:

App.WorkBooks.Închidere;

App.ActiveWorkBook.Close;

Metoda Close are mai mulți parametri opționali (în cazul legăturii tardive) care afectează regulile de salvare a registrului de lucru. Primul parametru ia valoarea True sau False și afectează dacă modificările aduse registrului de lucru sunt salvate. Al doilea parametru (Tipul Variant) este numele fișierului în care se salvează registrul de lucru (dacă i s-au făcut modificări). Al treilea parametru, de asemenea, Adevărat sau Fals, afectează dacă documentul este redirecționat către următorul utilizator prin e-mail și poate fi ignorat dacă această funcționalitate nu este utilizată.

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

App.ActiveWorkBook.Save;

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

Metoda SaveAs are mai mult de o duzină de parametri care afectează exact modul în care este salvat documentul (sub ce nume, cu sau fără parolă, care este pagina de coduri pentru textul pe care îl conține etc.).

Puteți închide Excel folosind metoda Quit a obiectului Excel.Application. În cazul Excel, această metodă nu are parametri.

Ieșirea unui document Excel pe un dispozitiv de imprimare se poate face folosind metoda PrintOut a obiectului WorkBook, de exemplu:

App.ActiveWorkBook.PrintOut;

Dacă trebuie să modificați setările de imprimare, trebuie să specificați valorile parametrilor corespunzători metodei PrintOut (în cazul Excel, sunt opt).

Accesarea foilor și celulelor

Foile dintr-un registru de lucru sunt accesate folosind colecția WorkSheets a obiectului WorkBook. Fiecare membru al acestei colecții reprezintă un obiect WorkSheet. Un membru al acestei colecții poate fi referit prin numărul său de index, de exemplu:

App.WorkBooks.WorkSheets.Name:= _ „Pagina 1”;

Exemplul de mai sus ilustrează modul în care puteți schimba numele unei foi de registru de lucru.

De asemenea, puteți face referire la o foaie de registru de lucru după nume, de exemplu:

App.WorkBooks.WorkSheets[‘Sheet1’].Nume:= _ ‘Pagina 1’;

Celulele individuale ale foii de lucru sunt accesate folosind colecția Cells a obiectului WorkSheet. De exemplu, puteți adăuga date în celula B1 după cum urmează:

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

Aici, prima dintre coordonatele celulei indică numărul rândului, a doua - numărul coloanei.

Adăugarea de formule la celule se face într-un mod similar:

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

Puteți șterge o celulă folosind metoda ClearContents.

Textul din celule este formatat utilizând proprietățile Font și Interior ale obiectului Cell și subproprietățile acestora. De exemplu, următorul fragment de cod afișează textul dintr-o celulă cu font Courier roșu, aldine, cu 16 puncte pe un fundal galben:

App.WorkBooks.WorkSheets.Cells.Interior _ .Culoare:= clGalben; App.WorkBooks.WorkSheets.Cells.Font _ .Color:= clRed; App.WorkBooks.WorkSheets.Cells _ .Font.Name:= „Curier”; App.WorkBooks.WorkSheets.Cells _ .Font.Size:= 16; App.WorkBooks.WorkSheets.Cells _ .Font.Bold:= Adevărat;

ID program