Integrarea Ms Office Si Visual Studio
Cuprins
1 Limbajul de programare C# 2
1.1 Definire C# 2
1.2 Tipuri de date ale C# 3
1.3 Tipuri de matrici 4
1.4 Expresii 4
1.5 Declarații 4
1.6 Clase 5
1.7 Constante 5
1.8 Domenii 5
1.9 Operatorii 6
1.10 Destructorii 6
1.11 Constructori statici 6
1.12 Funcții 7
1.13 Moștenire 7
1.14 Structuri 7
2 MICROSOFT OFFICE 9
2.1 MICROSOFT WORD 10
2.1.1 FONTURI 11
2.1.2 STILURI 11
2.1.3 CULORI 12
2.2 MICROSOFT EXCEL 12
2.2.1 Prezentarea programului Excel 12
2.2.2 Concepte de baza 12
3 Microsoft.Office.Interop 15
3.1 Dezvoltarea aplicațiilor software bazate pe MS Office 15
4 Arhitectura aplicatie 21
5 Descrierea si folosirea librariilor Microsoft.Office.Interop 23
5.1 Realizarea interacțiuni cu aplicațiile Office 23
6 Descriere aplicație 28
6.1 Citirea si stocarea datelor din documentului Excel 28
6.2 Formatarea datelor 31
6.3 Generarea automata a documentelor Word 32
6.4 Funcțiile care au fost implementate sunt următoarele: 35
6.4.1 Functia pentru citirea datelor din fisierul Excel 35
6.4.2 Functia cu ajutorul careia formatam datele de intrare 37
6.4.3 Functia de creare a documentului Word 39
6.4.4 Functii pentru generarea diplomelor si adeverintelor 40
6.4.5 Functii utilizate in formatarea documentului Word 43
INTRODUCERE
Tema aleasă pentru a fi dezbătută în acest proiect de disertatie se numește “Integrarea MS Office si Visual Studio”.
Scopul acestei lucrari de disertatie este realizarea unei aplicatii ce are ca input un document Excel si ca output un document Word. Documentul Excel citeste date introduse dintr-un document Microsoft Office Excel, iar pentru documentul Word se genereaza un document Microsoft Office Word cu informatiile citite din Excel sub diverse forme.
Lucrarea este structurată pe sase capitole, dintre care, trei capitole care cuprind partea teoretică și trei capitole care conțin arhitectura, descrierea aplicatie si intergrarea librariilor Microsoft.Office.Interop.
În primul capitol am prezentat limbajul de programare C#, in capitolul doi am descris suita programului Microsoft Office, in principal Microsoft Word si Excel iar in capitolul trei am prezentat structura librariei Microsoft Office Interop.
In capitolul patru este prezentata arhitectura aplicatiei si o scurta descriere a acesteia, in capitolul cinci am prezentat conexiunea programului Visual Studio si Microsoft Office. In capitolul sase am descris aplicatia si toti pasi necesari implementarii acesteia.
Aplicatia ofera posibilitatea utilizatorului sa genereza 3 modele de documente Word, cum ar fi: Diploma de merit, Diploma de concurs si adeverinta facultate. Documentul Excel care este input-ul aplicatiei poate fi considerat drept o baza de date in care sunt salvate toate informatiile necesare pentru a se putea genera un document Word. Documentul Word, care este output-ul aplicatiei, poate sa contina, in functie de ce alege utilizatorul, fie diplome de merit, diplome de la concursuri sau adeverinte.
Aplicatia s-a realizat in limbajul C# din cadrul mediului de dezvoltare Micosoft Visual Studio 2012 pentru că este un limbaj modern, special destinat dezvoltării rapide de aplicații.
In prima parte, am creat interfata aplicatiei, aceasta continand un buton LoadExcel cu ajutorul caruia se poate selecta documentul Excel dorit, un buton ExportToWord cu ajutorul caruia se poate genera tipul de document Word dorit si 3 checkbox-uri. Utilizatorul trebuie sa bifeze unul dintre cele 3 checkbox-uri, fiecaruia fiindu-i atribuit un diferit tip de document Word, pentru a putea sa inceapa procesul de generare a documentului Word.
Documentul Excel furnizat aplicatiei trebuie sa fie completat in prealabil cu toate informatiile necesare generarii fiecarui tip de diploma sau adeverinta. Exista trei diferite tipuri de fisiere Excel deoarece utlizatorul poate sa genereze trei tipuri diferite de documente Word. Din fiecare fisier Excel se citesc linie cu linie toate informatiile. Prima linie reprezinta capul de tabel si este afisat prima data in interfata aplicatiei, urmand ca pe urmatoarele linii sa fie toate informatiile necesare pentru a putea genera diploma sau adeverinta unui student. Informatiile sunt salvate inntr-o lista unde se pot manipula si formata in modul in care dorim. Numarul de linii scrise in documentul Excel ne spune cate diplome sau adeverinte sunt generate in documentul Word.
Documentul Word generat de aplicatie, contine toate informatiile prezente in fisierul Excel, datele fiind formatate si asezate in pagina corespunzator fiecarei diplome. In acest document se regaseste pe fiecare pagina cate o diploma sau adeverinta.
Rezultatul final al acestei aplicatii este un document Word in care este afisat pe fiecare pagina informatii referitoare la numele, codul numeric personal si mediile studentului pentru diploma de merit. In cazul diplomei de concurs sunt afisate numele participantului, locul si proba, iar in cazul adeverintei sunt regasite date precum numele, facultatea si pentru ce anume deserveste aceasta.
Pentru realizarea aplicatiei am folosit limbajul de programare C#, Microsoft Office Word si Microsoft Office Excel. Legatura dintre Micosoft Visual Studio, Microsoft Office Word si Microsoft Office Excel s-a realizat cu ajutorul librariilor Microsoft.Office.Interop.Excel si Microsoft.Office.Interop.Word.
Limbajul de programare C#
Definire C#
C# este un limbaj de programare orientată pe obiecte de la Microsoft care are ca scop combinarea puterii de calcul a C++ cu ușurință de programare a Visual Basic. C# este bazat pe C++ și conține caracteristici similare cu cele din Java.
C# este proiectat să funcționeze cu platforma celor de la Microsoft.Net. Obiectivul celor de la Microsoft este de a facilita schimbul de informații și servicii Web, și pentru a permite dezvoltatorilor să construiască aplicații portabile. Limbajul C# simplifică programarea prin utilizarea de Extensible Markup Language (XML) și Simple Object Access Protocol (SOAP), care permite accesul la un obiect al programării sau a unei metode fără a fi necesar programatorului să scrie cod suplimentar pentru fiecare pas. Deoarece programatorii pot construi pe un cod deja existent, limbajul de programare C# este mai rapid și mai puțin costisitor pentru crearea unor noi produse pe piață.
Microsoft colaborează cu ECMA, Organizația Internațională de Standardizare, pentru a crea un standard pentru C#. Organizația Internațională pentru Standardizare (ISO) recunoaște că C# ar încuraja și alte companii să dezvolte propriile versiuni ale limbajului. Companiile care folosesc deja C# sunt Apex Software, Bunka Orient, Component Source, devSoft, FarPoint Technologies, LEAD Technologies, ProtoView, and Seagate Software.
C# este un limbaj de programare orientată pe obiecte , inventat în jurul anilor 1999 – 2000 de Anders Hejlsberg de la Microsoft. Este foarte similar cu Java în sintaxă, dar totuși avănd o diferență majoră, toate tipurile de variabile sunt derivate dintr-o clasă comună moștenită.
Visual C#. NET este instrumentul de dezvoltare al Microsoft C#. Acesta include un mediu de dezvoltare interactiv, componente de design pentru construcții de aplicații Windows și Web, un compilator, și un program de depanare. Visual C#. NET este parte a unei suite de produse, numite Visual Studio.NET, care include, de asemenea Visual Basic .NET, Visual C++ .NET, și JScript limbaj de scripting. Toate aceste limbaje oferă acces la Microsoft .NET Framework, care include un motor comun de execuție și o bibliotecă bogată de clase. Pentru programatorii limbajului C#, acest lucru înseamnă că, deși C# este un limbaj nou, are acces complet la aceleași biblioteci de clase bogate, care sunt utilizate de instrumente experimentate, cum ar fi Visual Basic .NET și Visual C++ .NET. C# în sine nu include o bibliotecă de clasă.
Tipuri de date ale C#
C # suporta două tipuri de date : tipuri valoare și tipuri referință. Tipurile valoare sunt tipuri de date simple (de exemplu, char, int, și float), tipuri ENUM, și tipurile de structuri.
Tipurile referință includ tipul clasă, tipul interfață, tipul delegat și tipul matrice.
Tipurile valoare diferă de tipurile referință în care variabilele de tipuri valoare conțin în mod direct datele lor, iar variabilele de referințe conțin referințele la diferite tipuri de obiecte. Folosind tipul referință, este posibil pentru două variabile să facă referință la același obiect, și, astfel este posibil ca o operație pe o variabilă să afecteze obiectul referință al altor variabile. Folosind tipuri valoare, variabilele au fiecare propria copie a datelor, și nu este posibil ca o operație să afecteze pe altă operație.
Tipuri predefinite
C # oferă un set de tipuri de date predefinite, cele mai multe dintre ele sunt familiare pentru programatori C și C++.
Tipuri predefinite de tipul referință sunt obiecte și stringuri. Tipul obiect este tipul final de bază din toate celelalte tipuri. Tipul string este folosit pentru a reprezenta valorile string unicode. Valorile de tipul string sunt imuabile.
Tipurile predefinite de tipul valoare includ tipul întreg (cu semn și fără semn), float, bool, char, și decimal. Tipurile întregi cu semn sunt sbyte, short, int, și long; tipurile întregi fără semn sunt byte, ushort, uint, și ulong, precum și tipurile float și double.
Conversii
Tipurile predefinite au, de asemenea, conversii predefinite. De exemplu, există conversii între tipurile int și long. C# face diferența între două tipuri de conversii: conversii implicite și conversii explicite. Conversiile implicite sunt furnizate pentru conversiile care pot fi efectuate în condiții de siguranță, fără o examinare atentă. De exemplu, conversia de la int la long este o conversie implicită. Această conversie întotdeauna este reușită și niciodată nu duce la o pierdere de informații.
Tipuri de matrici
Matricile poate fi single-dimensional sau multi-dimensional. Matricile de forma "dreptunghiulară" și "neregulată" sunt acceptate.
Matricile sunt de tipul referință, și astfel declarația de matrice stabilește numai o parte a spațiului pentru referință la matrice. Instanțele de matrici sunt de fapt create prin intermediul inițializării matricei și creare de expresii de matrice.
Tipul elementului și forma unei matrici, inclusiv dacă este zimțată sau dreptunghiulară, și numărul de dimensiuni pe care le are, fac parte din declararea tipului său. Pe de altă parte, dimensiunea matricei, reprezentată prin lungimea fiecărei dimensiuni ale sale, nu face parte din tipul matricei. Această separare este făcută clar în sintaxa limbajului, lungimea fiecărei matrici fiind specificată la crearea acesteia, mai degrabă decât în tipul matricei.
Expresii
C # include operatori unari, operatori binari și operatori zecimali. Atunci când o expresie conține operatori multipli, ordinea de prioritate a operatorilor controlează ordinea în care operatorii individuali sunt evaluați. De exemplu, expresia x + y * z este evaluat că x + (y * z), deoarece operatorul * are prioritate mai mare decât operatorul +.
Atunci când un operand are loc între doi operatori cu aceeași prioritate, asociativitatea operatorilor controlează ordinea în care operațiunile sunt efectuate.
Cu excepția operatorilor de atribuire, toți operatorii binari sunt stânga-asociativi, ceea ce înseamnă că operațiunile sunt efectuate de la stânga la dreapta. De exemplu, x + y + z este evaluat ca (x + y) + z.
Operatorii de atribuire și operatorul condițional (:,?) sunt dreapta-asociativi, ceea ce înseamnă că operațiunile sunt efectuate de la dreapta la stânga. De exemplu, x = y = z este evaluat ca x = (y = z).
Declarații
C # împrumuta cele mai multe dintre declarațiile sale direct de la C și C + +, deși există unele completări și modificări notabile.
Clase
Declarațiile de clasă definesc noi tipuri de referință. O clasă poate moșteni de la o altă clasă, și poate implementa interfețe.
Membrii clasei pot include constante, câmpuri, metode, proprietăți, evenimente, index-uri, operatori, constructori, destructori, constructori statici și declarațiile de tip imbricate. Fiecare membru are o accesibilitate asociată, care controlează regiunile programului din care pot fi accesați membrii.
Exista cinci forme posibile de tipuri accesibilitate. Acestea sunt rezumate în tabelul de mai jos.
Constante
O constantă este un membru al clasei, care reprezintă o valoare constant. O valoare care poate fi calculată în timpul compilări. Constantelor le sunt permise să depindă de alte constante în cadrul aceluiași program, atâta timp cât nu există dependențele circulare. Chiar dacă constantele sunt considerate membri statici, o declarație de constantă nu impune și nici nu permite modificarea statică.
Domenii
Un câmp este un membru care reprezintă o variabilă asociată cu un obiect sau clasă. Utilizarea de câmpuri statice, în acest mod nu este ideal. Câmpurile sunt inițializate la un moment dat, înainte de a fi folosite, dar după aceasta inițializare nu putem face nimic pentru a împiedica un client din modificarea acestora. Câmpurile read-only pot fi folosite pentru a preveni astfel de probleme.
Atribuirea unui câmp read-only poate avea loc doar în momentul declarării, într-o instanță a constructorului sau într-un constructor static din aceeași clasă. Un câmp static read-only poate fi atribuit într-un constructor static și un câmp read-only non-static poate fi atribuit într-o instanță a constructorului.
Operatorii
Un operator este un membru, care definește sensul unui operator de expresie care poate fi aplicat la instanța unei clasei. Există trei tipuri de operatori, care pot fi definiți: operatori unari, operatori binari, și operatori de conversie.
Instanța constructori
Un constructor este un membru care implementează acțiunile necesare pentru a inițializa o instanță a unei clase. Dacă nu este declarat nici un constructor pentru o clasă, atunci un constructor fără parametrii este prevăzut în mod automat.
Destructorii
Un destructor este un membru care implementează acțiunile necesare pentru a distruge o instanță a unei clase. Destructorii nu poate avea parametrii, nu pot avea modificatori de accesibilitate, și nu pot fi apelați în mod explicit. Destructorul de o instanță se apelează în mod automat în timpul colectării rezidurilor.
Constructori statici
Un constructor static este un membru care implementează acțiunea necesară pentru a inițializa o clasă. Constructori statici nu pot avea parametrii, nu pot avea modificatori de accesibilitate și nu pot fi apelați în mod explicit. Constructorul static pentru o clasă se apelează în mod automat.
Funcții
O funcție este un membru care implementează un calcul sau o acțiune care poate fi folosită de către un obiect sau o clasă. Funcțiile au o listă de parametri formali (care poate fi goală), o valoare de returnare (cu excepția cazului în care funcția întoarce void), și pot fi statice sau non-statice. Metodele statice sunt accesate prin clasă. Metode non-statice care sunt de asemenea, numite funcții instanțiate, sunt accesate prin instanțe ale clasei.
Funcțiile pot fi supraîncărcate, ceea ce înseamnă că mai multe funcții pot avea același nume, atâta timp cât acestea au semnături unice. Semnătura unei metode constă în numele metodei și numărul, modificatori, și tipul parametrilor săi. Semnarea unei funcții nu include tipul returnat.
Moștenire
Clasele suportă o moștenire unică, și este un obiect al clasei de bază pentru toate celelalte clase.Metodele, proprietățile, și indexatori pot fi virtuali, ceea ce înseamnă că implementarea lor poate fi suprascrisa în clasele derivate.
O clasă poate indică faptul că aceasta este incompletă, și este destinat numai ca o clasă de bază pentru alte clase, inclusiv de modificatorul abstract. O astfel de clasă se numește o clasă abstractă. O clasă abstracta poate specifica membri abstracți, membrii pe care o clasă non-abstractă trebuie să-i implementeze.
Structuri
Lista de asemănări între clase și structuri este lungă. Structurile pot implementa interfețe, și pot avea aceiași tipuri de membri ca și clasele. Structurile diferă de clase, în mai multe privințe importante, cu toate acestea: structurile sunt mai degrabă de tipul valoare, decât de tipul referință, și moștenirea nu este acceptată pentru structuri. Valorile din structuri sunt stocate în stive . Programatorii pot îmbunătăți uneori performanța unui program prin utilizarea logică a structurilor.
Utilizarea structurilor în loc de clase poate face ca rularea unei aplicații să se execute mai lent, sau să utilizeze mai multă memorie, întrucât trecerea unei instanțe a structurii ca parametru necesită crearea unei copii a structurii. Nu există nici un substitut exact pentru structurile de date și algoritmi de design.
MICROSOFT OFFICE
Microsoft Office conține o colecție de programe specializate, care totuși lucrează împreună: Word, Excel, PowerPoint, Accesss, Outlook, Publisher. Toate programele Office au caracteristici și opțiuni de meniu comune. Interfața programelor este similară, chiar dacă programele îndeplinesc sarcini diferite.
Programele prezintă aceeiași structură de ferestre, meniuri, bare de instrumente și casete de dialog. Majoritatea operațiunilor de bază se realizează prin intermediul acelorași butoane sau comenzi (de exemplu, deschiderea – închiderea – salvarea unui fișier). Dacă există întrebări sau nelămuriri, o caracteristică Help identică este disponibilă în toate programele Office. Deasemeni, datele pot fi exportate ușor dintr‐un program în altul.
Figura 2.1. Programele Office
Word (procesor de texte) – oferă posibilitatea de a crea, edita, formata, salva și deschide documente text; documentele create pot include pe lângă text și tabele, grafică, diagrame etc.. În mod prestabilit fișierele Word 2010 sunt salvate cu extensia docx. Documentele mai pot fi salvate și în alte formate dintre care amintim Rtf și PDF.
Excel (calcul tabelar) – este o aplicație de calcul tabelar ce oferă posibilitatea de a introduce date, de a le analiza și de a face calcule cu acestea; sunt incluse numeroase funcții pentru operații matematice, statistice, financiare, de baze de date, de dată și timp etc.
PowerPoint (prezentare multimedia) – permite crearea de prezentări multimedia pe bază de diapozitive (slide-uri) care pot include alături de text și grafică, tabele, diagrame și animație.
Access (baze de date) – oferă lucrul cu baze de date printr-o interfață simplă; pot fi create și editate tabele, rapoarte, interogări, formulare.
Outlook este un program de comunicare și gestionare a informațiilor personale ce poate fi utilizat pentru gestionarea mesajelor e‐mail, întâlniri, persoane de contact, sarcini.
OneNote este un program de luat notițe, integrează în cadrul notelor orice tip de date, se poate scrie, desena, insera grafice, secvențe audio, video.
FrontPage este un program pentru design și creare de pagini web.
Publisher este un program de tehnoredactare folosit pentru realizarea de ziare, broșuri, cataloage, cărți de vizită.
MICROSOFT WORD
Este unul dintre cele mai puternice si folosite editore de texte. Aplicatia asigura functiunile elementare ale unui editor de texte, si anume : introducerea textului, stabilirea diferitelor tipuri de caractere, alinierea automata a textului, aranjarea textului in pagina, tiparirea textului.
Fiind un editor complex va pune la dispozitie multe alte facilitati, de exemplu :
-poti sa modifici dimensiunile zonei albe care inconjoara textul in documentul tau, sa maresti dimensiunea marginilor pentru a crea o zona libera mai mare, sau sa micsorezi dimensiunea marginilor pentru cazul in care doresti ca textul sa ocupe un spatiu cat mai mare.
-textul poate fi centrat fata de marginile de sus si respectiv jos ale paginii sau fata de marginile din stanga si dreapta.
-acest program iti permite sa numerotezi toate paginile documentului la care lucrezi, dar in acelasi timp poti sa amplasezi si numarul paginii curente atat in partea de sus cat si in partea de jos a ei.
-deasupra textului in partea de sus a paginii apar antetele, iar in partea de jos a paginii apar subsolurile.Atat antetele cat si subsolurile sunt portiuni de text care apar pe fiecare pagina, independent de textul propriu-zis la care lucrezi.
-cu acest program poti sa modifici valoarea curenta a dimensiunii foii de hartie, in functie de tipul de format pe care doresti sa-l utilizezi.
Microsoft Word te ajuta ca textul sa apara in pagina pe mai multe coloane, ca intr-un ziar sau o revista.
Dupa introducerea textului, se poate incepe tehnoredactarea propriu-zisa. In aceasta etapa se realizeaza in primul rand formatarea caracterelor cu care sunt scrise diferitele parti ale documentului.
FONTURI
Un font (corp de litera) este un set de maxim 256 de caractere care au un aspect grafic comun. Exista diferite tipuri de formatari a textului exemplu :
ARIAL BLACK TAHOMA
CASTELLAR HARRINGTON
Fontul este caracterizat si prin dimensiunea caracterelor cu care se scrie textul respectiv.Alegerea dimensiunii caracterelor se poate realiza o data cu stabilirea fontului sau separat de aceasta operatie.
STILURI
Pentru a evidentia anumite idei, pentru a atrage atentia asupra unei anumite portiuni de text, caracterele pot fi scrise cu un anumit stil. Aceste atribute sunt :
-ingrosare (bold)
-inclinare (italic)
-subliniere (underline)
CULORI
Un alt atribut al caracterelor este si culoarea, exista o paleta variata de culori se poate pana si customiza nuantele cum doreste utilizatorul.
MICROSOFT EXCEL
Prezentarea programului Excel
Numele de foaie de calcul provine de la procedurile manuale din contabilitate care folosesc formulare de hârtie de mari dimensiuni liniate orizontal si vertical sub forma tabelara. Utilizarea calculatorului a permis adaugarea la casutele din tabelele manuale, pe lânga valorile înscrise, a mecanismului de calcul pentru aceste valori, a specificatiilor de afisare a valorilor, etc.
Altfel spus, foile de calcul electronice reprezinta o modalitate de organizare si de gestionare a datelor, sub forma unor tabele ("tableur" în franceza, "spreadsheet" sau mai scurt "sheet" în engleza).
De-a lungul timpului au aparut mai multe aplicatii care implementau aceasta modalitate de lucru. Dintre cele cu cea mai mare raspândire sunt produsele software: LOTUS123 ale carui prime variante rulau sub sistemul de operare MS-DOS si EXCEL, care se executa sub controlul mediului Windows. Ulterior EXCEL a fost integrat de firma Microsoft în pachetul de programe OFFICE, care mai cuprinde si alte aplicatii: Word, Power Point, Access etc..
Concepte de baza
Într-un tabel descris printr-o foaie de calcul este posibila efectuarea urmatoarelor operatii:
– memorarea datelor,
– actualizarea datelor memorate,
– organizarea datelor, prin operatii de ordonare, selectie, grupare
– realizarea de calcule pornind de la aceste date,
– vizualizarea rezultatelor, inclusiv prin reprezentari grafice definite pentru datele din tabele.
Aplicatia EXCEL organizeaza datele în urmatoarele structuri de date:
Foaia de lucru (workseet), care reprezinta un singur tabel cu mai multe linii si coloane. Unitatea elementara adresabila din tabel este celula, aflata la intersectia unei linii cu o coloana. O celula poate contine date sau expresii de calcul. Implicit, o foaie de calcul contine 28=256 coloane (de la A la IV) si 214=16384 linii (de la 1 la valoarea maxima)
Agenda de lucru (workbook), care este o colectie de foi de lucru care contine implicit 6 foi de calcul dar poate avea pâna la maximum 256 foi de calcul. O sesiune EXCEL poate gestiona simultan mai multe agende de lucru; lista tuturor agendelor de lucru deschise la un moment dat este afisata în meniul Window; un fisier cu extensia .XLS memoreaza o agenda de lucru si reprezinta unitatea adresabila la nivelul sistemului de operare.
Microsoft Office Excel este un Excelent soft destinat managementului informatiei si calculului tabelar, fiind folosit in aproape toate companiile, mai mici sau mai mari. Manipularea informatiei este o activitate care trebuie desfasurata de persoane care stapanesc foarte bine functionalitatile aplicatiei si poate fi externalizata sau poate fi desfasurata de un angajat din cadrul companiei. Asa ca trebuie sa te asiguri inca de la inceput ca aceia care vor lucra cu Excel-ul in scopul manipularii informatiei si a obinerii de rapoarte pentru companie cunosc foarte bine aplicatia si nu vor ajunge sa faca greseli care mai tarziu vor influenta negativ intreaga echipa.
Un avantaj important al Excel-ului este acela ca folosirea aplicatiei nu necesita instalarea unor softuri aditionale. Altfel spus, computerul este inca din start echipat cu tot ce ii trebuie pentru a putea rula Microsoft Excel. De asemenea Excel-ul este foarte usor de folosit, avand o interfata accesibila chiar si pentru cei care nu au prea mult exercitiu anterior. Asa ca nu este nevoie de prezenta permanenta a unui consultant Excel in companie, deoarece multe modificari asupra unui fisier pot fi facute de orice angajat, fara sa existe riscul deteriorarii rapoartelor sau calculelor.
Cum aplicatia are foarte multe functii financiare, consultantul Excel nu este nevoit sa creeze de la 0 rapoarte financiare si nici sa scrie el formulele de calcul care duc la obtinerea rezultatelor financiare. Unui fisier Excel se poate aplica o parola de deschidere acest lucru garantand securitatea datelor. Astfel te asiguri ca persoane neautorizate nu vor avea acces la informatia trimisa de tine pe mail.
Insa pe langa numeroasele avantaje, manipularea informatiei prin Excel prezinta si unele dezvanataje. Totusi acestea nu sunt atat de mari incat sa nu poti trece peste ele sau sa nu le poti minimiza. De exemplu, in cazul in care volumul de informatie este prea mare, viteza de lucru a aplicatie incepe sa scada. Tocmai de asta cei care cunosc bine softul obisnuiesc sa foloseasca mai multe fisiere pentru a stoca informatia. Dar in felul acesta cresc sansele pierderii unei parti din informatia gestionata.
Externalizarea activitatii de gestiune a datelor prin Excel poate insemna costuri reduse, dar in cazul in care compania are in cadrul ei un expert Excel, poate primi suport constant din partea acestuia pentru operatiunile de rutina, ramanand ca pentru problemele mai importante sa apeleze la suport din afara ei.
Microsoft.Office.Interop
Dezvoltarea aplicațiilor software bazate pe MS Office
Aplicațiile bazate pe Office sunt deosebit de utile, în practică, deoarece folosesc facilitățile existente în aplicațiile pachetului software Microsoft Office. Pentru a dezvolta astfel de aplicații sau extensii, pe platforma .NET a fost construit un framework cunoscut sub denumirea de Visual Studio Tools for Office (VSTO). Acesta oferă suport de programare .NET pentru Word, Excel, Outlook, PowerPoint, Project, Visio și InfoPath în Visual Studio. De asemenea, VSTO permite ca documente Word și Excel să folosească caracteristici de programare din .NET cum ar fi suport pentru legarea datelor, controale care se pot folosi în forme windows etc.
Figura 3.1 Ierarhia modelului EOM
Scrierea codului pentru aplicațiile bazate pe Office implică utilizarea modelului cunoscut sub denumirea de OOM – Office Object Model. Acest model conține un set de clase și obiecte necesare pentru pentru controlul aplicațiilor Office. Modelele sunt particularizate în funcție de aplicațiile pe care le controlează, de exemplu: EOM – Excel Object Model, WOM – Word Object Model etc. In general, aceste modele conțin o ierarhie de clase și sunt organizate astfel încât în rădăcina ierarhiei se află clasa Application care modelează comportamentul unei aplicații particulare din pachetul software MS Office. Pe lângă clasa Application care este prezentă în toate ierarhiile, există și clase particulare în ierarhie ce depind de aplicația propriu-zisă și corespund entităților pe care le manipulăm efectiv în aplicațiile Office. De exemplu, pentru aplicația Excel, principalele clase cât și relațiile dintre ele sunt ilustrate în figura 3.1.
Figura 3.2 Ierarhia modelului WOM
Se observă că, la baza ierarhiilor se află clasa Application care modelează comportamentul aplicației Office și prin intermediul acestei clase se construiește o instanță a aplicației. Instanța aplicației poate conține o colecție de documente modelată prin intermediul colecției Documents în WOM sau Workbooks în EOM. Un element al colecției, adică un obiect de tip Document sau Workbook, poate conține o colecție de paragrafe (Paragraphs) sau o colecție de foi de calcul Worksheets. Pentru aplicația Word, ierarhia este prezentată în figura 3.2.
Pentru dezvoltarea de aplicații bazate pe PowerPoint, modelul este PPOM și are ierarhia prezentată în figura 3.3.
Figura 3.3 Ierarhia modelului PPOM
Din figură se observă că aplicația este compusă dintr-o colecție de prezentări (Presentations) care are elemente de tip prezentare (Presentation), o prezentare la rândul ei se compune dintr-o colecție de slide-uri (Slides) de elemente Slide în care se găsesc diferite tipuri de obiecte, cu corespondent vizual, conținute într-o colecție de elemente Shapes.
Ierarhiile de clase specifice tipurilor de aplicații Office conțin clase care descriu entitățile cu care operează aplicațiile pachetului Office.
Folosind elemente ale modelului de programare OOM se pot dezvolta aplicații în diferite modalități:
– Aplicații de utilizator ce interacționează cu aplicații Office; adică programatorul își dezvoltă propria sa aplicație care în background va controla și interacționa cu aplicații și documente Office. De exemplu, se construiește o aplicație independentă, în mod consolă sau Windows Forms, care are ca scop introducerea unor date într-un document Word pentru a fi ulterior stocat sau imprimat pe hârtie. Executarea unei astfel de aplicații va determina lansarea în execuție a aplicației Office pentru a efectua diferite procesări, specifice. In acest mod, aplicația de utilizator se va executa într-un proces distinct față de aplicația Office.
– Construirea de module funcționale existente sub formă de biblioteci cu legare dinamică (DLL – Dynamic Link Library) care se includ în aplicațiile Office pentru a personaliza prelucrările aplicate documentelor. De exemplu, construirea unui modul add-in care să aibă ca element de interfață un buton pentru efectuarea unei prelucrări nestandard asupra datelor existente într-o foaie de calcul;
– Atașarea de cod documentelor Office, implică construirea unei aplicații pe baza unui șablon de aplicație Office, definit în mediul Visual Studio ca tip distinct de proiect (de exemplu, pe baza unui șablon de aplicație Excel). Codul atașat permite efectuarea de prelucrări personalizate și impune construirea de noi interfețe pentru declanșarea procesărilor. Secvențele de cod se pot atașa fie documentelor Office fie șabloanelor de documente.
Ultimele două modalități prezentate de a dezvolta aplicații bazate pe Office au caracteristic faptul că secvențele de cod personalizate rulează cu aplicația Office în același proces; conceptul poartă numele de cod gazduit. Pentru a rula codul în procesul aplicației Office, aplicația respectivă trebuie să recunoască codul, sa-l încarce în procesul său și apoi sa-l execute. Componentele Office add-in sunt înregistrate în registri astfel încât ele pot fi găsite și startate de către aplicațiile Office. Codul asociat documentelor nu necesită a fi înregistrat, în schimb el este asociat cu documentul prin adăugarea de proprietăți specifice care se stochează în fișierul documentului. Când documentul Office este încărcat atunci se consultă proprietățile și se încarcă și codul asociat documentului.
Inainte de VSTO, dezvoltatorii de aplicații bazate pe Office puteau folosi limbajul VBA pentru a scrie secvențe de cod prin care să-și definescă propriile prelucrări. Aceste secvențe erau scrise direct în interfața aplicației Office. Toate secvențele de cod VBA se stocau odată cu documentul pentru care acestea erau scrise. In VSTO, această modalitate de a asocia cod unui document se numește soluție la nivel de document. Astfel, în VSTO, se poate construi o componentă add-in care să fie livrată împreună cu documentul pentru care procesează date. Această componentă devine activă la momentul încărcării documentului respectiv în aplicația Office. Acest tip de soluție la nivel de document este relevant în cazul aplicațiilor Word și Excel.
VSTO mai introduce un nou concept și anume soluție la nivelul aplicaței. Astfel, soluția furnizată sub forma unui add-in se folosește pentru a realiza o procesare specifică și se poate aplica oricărui document deschis în aplicația pentru care a fost creată componenta.
Partea Practică
Arhitectura aplicatie
În continuare vom face o scurtă descriere a schemei.
Intrăriile aplicației implementate sunt fisierele de tip Excel pe baza carora vom putea mai departe sa citim informatiile si sa generam documentele Word. Fisierele Excel trebuie sa fie create de catre utilizator. Dupa crearea acestora utilizatorul va rula aplicatia si va incarca fisierul Excel dorit folosind butonul .
Dupa ce fisierul Excel va fi citit, in interfata aplicatiei se vor afisa toate informatiile prezente in documentul Excel. Utilizatorul va avea posibilitatea sa editeze aceste date, daca este nevoie, inainte de a genera documentul Word.
Modificarile facute in interfata programului nu vor fi salvate in documentul Excel deschis, ele fiind folosite doar pentru generarea documentului Word curent. Aceste modificari vor fi stocate pana la inchiderea aplicatiei sau incarcarea unui nou document Excel. Pentru a putea sti ce tip de document Word vrem sa generam, utilizatorul va trebui sa selecteze checkbox-ul dorit.
In functie de aceasta alegere datele vor fi formatate si afisate corespunzator in documentul Word. Daca nu se va selecta nici un checkbox, aplicatia va returna un mesaj de eroare si generarea documentului Word nu va incepe, figura 4.1.
Figura 4.1. Mesaj de eroare
Folosirea butonului Export To Word va activa procesul de completarea a diplomelor sau a adeverintelor. Dupa ce procesul de generare a diplomelor sau adeverintelor a fost finalizat cu success un mesaj de notificare va fi generat. Utilizatorul va putea apoi sa examineze si sa decida ce va face cu documentul generat.
Daca utilizatorul vrea sa genereze alt tip de document Word sau sa schimbe fisierul de input tot ce trebuie sa faca este sa incarce noul fisier in aplicatie si sa selecteze checkbox-ul aferent tipului de diploma sau adeverinta dorit.
Pasi urmati in realizarea aplicatiei:
Creearea unui document Excel cu datele de intrare
Crearea unei aplicatie C# in care am adaugat referinta Interop pentru Word si Excel
Citirea datelor din Excel si salvarea lor intr-o lista
Crearea unor functi pentru generarea diferitelor tipuri de documente Word
Generarea documentelor Word cu datele introduce in formatul dorit
In continuare vom prezenta legatura dintre aplicatie si programul Microsoft Excel respectiv Microsoft Office care a fost realizata utilizand ca referinta in proiect librariile Microsoft.Office.Interop.
Descrierea si folosirea librariilor Microsoft.Office.Interop
Realizarea interacțiuni cu aplicațiile Office
Acest mod de interacțiune cu aplicațiile din Office presupune existența unei aplicații principale care va avea ca scop construirea unei noi instanțe a unei aplicații Office, apoi prin folosirea modelului orientat obiect, controlul interacțiunii cu aceasta. La final, aplicația Office trebuie închisă în mod explicit deoarece închiderea aplicației principale nu determină în mod implicit și închiderea aplicației Office.
Pe de altă parte, aplicația Office rulează în background adică ea nu este vizibilă pentru utilizator. Prin schimbarea valorii proprietății Visible, fereastra aplicației Office devine vizibilă pentru utilizator astfel încât acesta poate realiza vizual alte operații folosind interfața acesteia. La apăsarea unui buton, textul din ListView va fi exportat într-un document Word. De asemenea și datele conținute în controlul de tip ListView se vor exporta în document si vor fi afisate in functie de alegerea utilizatorului. După efectuarea transferului, fereastra aplicației Word va deveni vizibilă astfel încât utilizatorul va putea salva, tipări sau închide documentul.
La apăsarea pe butonul Export to Word, datele introduse în forma aplicației vor fi exportate într-un document Word. Pentru ca o aplicație să interacționeze cu un document al unei aplicații Word, prin modelul WOM(Word Object Model), trebuie ca la proiect să se adauge referința către componenta .NET: Microsoft.Office.Interop.Word, pentru care se adaugă și domeniul de nume sub forma:
using Word = Microsoft.Office.Interop.Word;
A. Construirea documentului, necesită mai întâi crearea cadrului de lucru:
– Crearea unei noi instanțe a unei aplicații Word:
Word.Application wapl = new Word.Application();
– Construirea în cadrul acestei instanțe a unui nou document:
Word.Document wdoc = wapl.Documents.Add();
B. Popularea documentului cu date și formatarea lor corespunzătoare:
Unul dintre cele mai utilizate și flexibile obiecte care sunt necesare pentru explorarea și popularea cu date a unui document Word, prin modelul WOM, este Range. Prin intermediul lui se definește un bloc continuu de text dintr-un document. După ce documentul a fost creat și este vid, se definește un obiect de tip Range mapat pe întregul document, prin apelul metodei Range() a obiectului document (wdoc):
Word.Range wr = wdoc.Range();
După definirea unui astfel de obiect se poate seta proprietatea Text pentru a scrie un anumit text în document, în zona marcată de obiectul Range:
wr.Text = "\n\n"+titlu.Text+"\n";
din secvența de cod, se observă că s-au lăsat două linii vide în document, iar textul celei de-a treia a fost preluat din obiectul titlu de tip TextBox. După scrierea acestui text se mai adaugă o linie vidă în cadrul documentului.
Textul din cadrul unui Range poate fi formatat corespunzător:
wr.Font.Name = "Times New Roman";
wr.Font.Size = 14;
wr.Font.Bold = -1;
din secvență se observă că s-a ales fontul Times New Roman de dimensiune 14 și îngroșat (Bold)
Pentru a continua cu adăugarea de alte texte, la document, trebuie să repoziționăm în mod corespunzător obiectul de tip Range. In cazul exemplului, se dorește ca noul Range să fie poziționat la sfârșitul celui curent adică să permită adăugarea unui text în continuarea celui care a fost scris în document.
Prin apelul metodei Collapse(), pentru un obiect de tip Range, se realizează generare unei noi poziții care presupune ca poziția de început să fie identică cu cea de sfârșit. In funcție de direcția în care se repoziționează domeniul, obiectul Range se poate poziționa la sfârșitul sau la începutul domeniului curent:
wr.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
din apelul metodei se observă că direcția este indicată spre sfârșitul documentului adică poziția de început a noii zone este identică cu cea de sfârșit a obiectului Range curent. Apelând metoda InsertAfter() se poate insera un text după această nouă poziție:
wr.InsertAfter("La data: " + DateTime.Now.Date.ToShortDateString()+ "\n");
linia de text adăugată include și data sistem și determină trecerea la o nouă linie în document.
După adăugarea textului, el este formatat diferit de primul text introdus în document:
wr.Font.Name = "Arial"; wr.Font.Size = 10; wr.Font.Bold = 0; // neingrosat
Alinierea textului în pagină se face, în mod implicit, la stânga. Pentru a modifica alinierea textului introdus în document se va modifica proprietatea Alignment care este specifică unui paragraf din document.
Un paragraf se termină când se introduce caracterul de linie nouă în text; după care începe un nou paragraf. Deoarece au fost întroduse două linii vide, înseamnă că textul urmator formează cel de-al treilea paragraf din document, care se centrează prin secvența:
wdoc.Paragraphs[3].Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
Adăugarea unui tabel la un document se face prin intermediul unui obiect de tip Range.
De aceea, s-a repoziționat obiectul de tip Range la sfârșitul celui anterior definit:
wr.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
Se poate construi un tabel (ts) având un număr de linii identic cu numărul de linii a controlului ListView (lv), în timp ce, la numărul de coloane a controlului a mai fost adăugată una, pentru a înscrie și numărul liniei din tabel.
Word.Table ts = wr.Tables.Add(wr, lv.RowCount, lv.ColumnCount+1);
Lățimea coloanelor a fost stabilită în raport de lățimea paginii (latp) care s-a calculat pornind de la lățimea paginii și a marginilor:
float latp = wdoc.PageSetup.PageWidth – (wdoc.PageSetup.RightMargin +
doc.PageSetup.LeftMargin);
Pentru stabilirea propriu-zisă a lațimii coloanelor s-a aplicat un procent spațiului disponibil (latp), astfel:
ts.Columns[1].Width = (float)0.10 * latp;
ts.Columns[2].Width = (float)0.70 * latp;
ts.Columns[3].Width = (float)0.20 * latp;
prima coloană are 10% din lațimea totală, cea de-a doua coloană are 70% iar ultima 20%.
Capul de tabel s-a definit prin scrierea textului corespunzător în fiecare celulă a primului rând. O celulă (Cell) conține proprietatea Range prin intermediul căreia se scrie textul în celulă:
ts.Cell(1, 1).Range.Text = "Nr. crt.";
ts.Cell(1, 2).Range.Text = gv.Columns[0].HeaderText;
ts.Cell(1, 3).Range.Text = gv.Columns[1].HeaderText;
Pentru a marca mai bine capul de tabel, primului rând din tabel i s-a asociat o culoare de fundal (culoarea gri):
ts.Rows[1].Shading.BackgroundPatternColor = Word.WdColor.wdColorGray15;
Popularea cu date a tabelului se poate realiza folosind următoarea secvență iterativă:
for (int i = 0; i < gv.RowCount – 1; i++)
{
ts.Cell(i + 2, 1).Range.Text = (i + 1).ToString();
ts.Cell(i + 2, 1).Range.Paragraphs.Alignment =
Word.WdParagraphAlignment.wdAlignParagraphRight;
ts.Cell(i + 2, 2).Range.Text = lv.Rows[i].Cells[0].Value.ToString();
ts.Cell(i + 2, 3).Range.Text = lv.Rows[i].Cells[1].Value.ToString();
ts.Cell(i + 2, 3).Range.Paragraphs.Alignment =
Word.WdParagraphAlignment.wdAlignParagraphRight;
}
Tabelul se completează linie cu linie, fiecare linie se completează celulă cu celulă. Se observă că alinierea datelor din coloanele 1 și 3 se face la dreapta deoarece ele sunt numerice.
După popularea cu date, tabelul se formatează la nivel global în sensul că se stabilește dimensiunea fontului, și se îngroașă (Bold) doar capul de tabel:
ts.Range.Font.Size = 10;
ts.Range.Font.Bold = 0;
ts.Cell(1, 1).Range.Font.Bold = -1;
ts.Cell(1, 2).Range.Font.Bold = -1;
ts.Cell(1, 3).Range.Font.Bold = -1;
Se trasează liniile de demarcație (Borders) a celulelor tabelului:
ts.Borders.Enable = 1;
Fereastra aplicației Word care include și documentul nou construit devine vizibilă utilizatorului:
wapl.Visible = true;
iar acesta poate modifica, salva sau tipării documentul.
Realizarea interacțiunii cu documente Excel se va face folosind clase din ierarhia EOM (Excel Object Model). Se va avea în vedere că trebuie să se construiască o instanță a unei noi aplicații Excel, aceasta poate conține o colecție de documente care la rândul lor conțin colecții de foi de calcul. Accesul la datele efective ale unei foi de calcul se realizează prin obiecte de tip Range sau prin obiecte de tip celulă (Cell).
Folosirea modelului EOM impune adaugarea referinței: Microsoft.Office.Interop.Excel la proiect și totodată utilizarea domeniului corespunzător ceea ce presupune adăugarea în codul sursă a declarației:
using Excel = Microsoft.Office.Interop.Excel;
In cadrul clasei forma (Form1) se declară următoarele variabile:
Excel.Application eapl; // pentru a referi obiectul aplicație
Excel Excel.Workbook wb; // pentru a referi obiectul document
Excel Excel.Worksheet sh; // pentru a referi o foaie de calcul din document
pentru a fi vizibile și utilizabile din orice metodă a clasei formă.
Descriere aplicație
Citirea si stocarea datelor din documentului Excel
Dupa ce rulam aplicația o fereastră cu interfata programului o sa ne întâmpine figura 6.1:
Figura 6.1. Interfata initiala a programului
Prin apasare butonului de LoadExcelFile avem posibilitatea sa deschidem fisierul Excel dorit. Pentru deschiderea fisierului Excel se creeaza un obiect de tipul Excel Microsoft.Office.Interop.Excel.Application _ExcelApp, cu ajutorul acestui obiect vom putea sa accesam rand pe rand toate informatiile din document.
//create the Application object we can use in the member functions.
Microsoft.Office.Interop.Excel.Application _ExcelApp = new Microsoft.Office.Interop.Excel.Application();
_ExcelApp.Visible = false;
_ExcelApp.UserControl = true;
string fileName = @"D:\dizertatie\Diploma.xlsx";
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = System.IO.Directory.GetParent(fileName).FullName;
ofd.FileName = fileName;
fileName = System.IO.Path.Combine(Directory.GetParent(ofd.FileName).FullName, Path.GetFileName(ofd.FileName));
//open the workbook
Workbook workbook = _ExcelApp.Workbooks.Open(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Selectia sheet-urilor din fisierul Excel se face cu ajutorul obiectului Worksheet
//select the first sheet
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
//find the used range in worksheet
Microsoft.Office.Interop.Excel.Range ExcelRange = worksheet.UsedRange;
//get an object array of all of the cells in the worksheet (their values)
object[,] valueArray = (object[,])ExcelRange.get_Value(
XlRangeValueDataType.xlRangeValueDefault);
Afisarea capului de tabel folosind prima linie din Excel.
listView1.Items.Clear();
for(int col = 1; col <= worksheet.UsedRange.Columns.Count; ++col)
{
listView1.Columns[col-1].Text = (valueArray[1, col] != null) ? valueArray[1, col].ToString() : string.Empty;
}
Stocarea datelor din fisierul Excel se va face linie cu linie cu ajutorul unei liste de tip listview.
for(int row = 2; row <= worksheet.UsedRange.Rows.Count; ++row)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = (valueArray[row, 1] != null) ? valueArray[row, 1].ToString() : string.Empty;
for(int col = 2; col <= worksheet.UsedRange.Columns.Count; ++col)
{
//access each cell
lvi.SubItems.Add(valueArray[row, col].ToString());
//lvi.SubItems[col-1].Text = valueArray[row, col].ToString();
}
listView1.Items.Add(lvi);
}
Dupa ce toate datele au fost citite si stocate cu succes, fisierul Excel se va inchide si un mesaj cu statusul operatie va fi generat.
//inchidearea tuturor instantelor excel
workbook.Close(false, Type.Missing, Type.Missing);
Marshal.ReleaseComObject(workbook);
_ExcelApp.Quit();
Marshal.FinalReleaseComObject(_ExcelApp);
Thread.CurrentThread.CurrentCulture = oldCI;
MessageBox.Show("Fisierul Excel a fost incarcat cu succes!");
Figura 6.2. Mesaj fisierul incarcat cu succes
Afisarea datelor se va face in interfata aplicatie, figura 6.3.
Figura 6.3. Interfata dupa ce fisierul Excel a fost incarcat
Formatarea datelor
Cu ajutorul functilor implementate se vor formata datele citite din Excel pentru afisarea finala in documentul Word. Formatarea si afisarea datelor se va face in formatul diploma de merit, adeverinta sau diploma pentru concursuri sportive.
Functia principala implementata pentru a face acest lucru este AddText(). Cu ajutorul acestei functii setam dimensiunea fontului 0 daca este mai mica decat 0.
if(fontSize < 0)
fontSize = 0;
// Set up the header information.
start = 0;
end = 0;
Setam tipul fontului si dimensiunea lui.
rng.InsertBefore(text);
rng.Font.Name = fontName;
rng.Font.Size = fontSize;
Daca am ales ca textul sa aiba proprietatea bold setam bitul pe 1.
if(isBold)
{
rng.Bold = 1;
}
Daca am ales ca textul sa aiba proprietatea italic setam bitul pe 1.
if(isItalic)
{
rng.Italic = 1;
}
Setam culoarea textului si unde sa fie pozitionat.
rng.Font.Color = fontColor;
rng.ParagraphFormat.LeftIndent = leftIdent;
In interiorul acestei functii avem si apelul functiei
SetAlignText(fontAlignment);
Generarea automata a documentelor Word
Cu ajutorul aplicatie vom putea sa generam trei tipuri de documente Word acestea fiind, diplome de merit, diplome aferente unui concurs si adeverinte care atesta ca un student este la facultate. Generarea celor trei tipuri de documente Word se va face prin selectarea utilizatorului a unor checkbox-uri.
Afisarea datelor in Word se va realiza in functie de ce optiune alege fiecare utilizator al aplicatie. Vom putea sa generam pe rand orice tip de diploma. Deorece fiecare diploma sau adeverinta are un format diferit si datele de intrare difera de la diploma la diploma, va fi nevoie sa incarcam de fiecare data fisierul Excel corespunzator fiecarei tip de diploma sau adeverinta.
Utilizatorul mai are posibilitatea sa editeze datele direct in interfata programului dupa ce fisierul Excel a fost incarcat, astfel daca se observa o eroare, ea va putea fi modificata direct in interfata aplicatiei fara a se mai deschide inca o data fisierul Excel. Modificarile facute in interfata aplicatiei nu se vor salva automat in fisierul Excel, aceste modificari vor fi folosite doar pentru generarea actuala.
Dupa ce utilizatorul a ales tipul de diploma sau adeverinta care se vrea a fi generata poate sa apese butonul si generarea documentului Word va incepe.
Ordinea operatiilor efecutate pentru generarea documentului Word sunt urmatoarele:
Crearea obiectului cu ajutorul caruia vom deschide documentul Word pentru a putea scrie datele, acest lucru se va realiza cu ajutorul functiei CreateWordDocument()
In functie de tipul de diploma sau adeverinta selectat de utilizator se va realiza apelul functiei corespunzatoare. Astfel vom apela una dintre cele 3 functii implementate , GenerareDiploma(), GenerareConcurs(), GenerareAdeverinta().
La sfarsitul generarii cu succes a fiecarui tip de diploma sau adeverinta utilizatorul va primi un mesaj de notificare in care este afisat ce tip de diploma sau adeverinta a fost generat si daca operatia s-a efectuat cu succes.
Dupa ce functia GenerareDiploma() a fost executata cu succes un mesaj de notificare va fi lansat pentru a instiinta utilizatorul, figura 6.4.
Figura 6.4. Mesaj generare cu succes diploma de merit
Dupa ce functia GenerareConcurs() a fost executata cu succes un mesaj de notificare va fi lansat pentru a instiinta utilizatorul, figura 6.5.
Figura 6.5 Mesaj generare cu succes diploma de concurs
Dupa ce functia GenerareAdeverinta() a fost executata cu succes un mesaj de notificare va fi lansat pentru a instiinta utilizatorul, figura 6.6.
Figura 6.6 Mesaj generare cu succes adeverinte
Dupa ce documentul Word a fost generat cu succes utilizatorul va putea fie sa salveze datele generate sa le modifice sau sa le tipareasca la imprimanta. Fisierul Word generat trebuie inchis de catre utilizator dupa ce acesta nu mai doreste sa il foloseasca.
Funcțiile care au fost implementate sunt următoarele:
Functia pentru citirea datelor din fisierul Excel
Functia cu ajutorul careia formatam datele
Functia de creare a documentului Word
Functia pentru generarea diplomelor si adeverintelor
Functii utilizate in formatarea documentului Word
În continuare vom detalia și explica aceste funcții.
Functia pentru citirea datelor din fisierul Excel
Functia ReadExcel() a fost implementata pentru a putea deschide un fisier Excel, fisierul de input necesar aplicatiei. Apelul acestei functii se va face in momentul in care utilizatorul va apasa butonul de LoadExcel.
Fisierul va fi apoi incarcat in aplicatie, prima data se va citi prima linie din fisier care reprezinta capul de tabel. Apoi vom citi linei cu linie si vom afisa in obiectul de tip ListView toate informatiile pana la sfarsitul datelor.
Dupa ce operatia de scriere si citire a datelor a fost executata cu succes vom genera un mesaj de notificare pentru ca utilizatorul sa stie ca citirea s-a terminat si poate sa treaca la etapa de generare a datelor.
public void ReadExcel()
{
//create the Application object we can use in the member functions.
Microsoft.Office.Interop.Excel.Application _ExcelApp = new Microsoft.Office.Interop.Excel.Application();
_ExcelApp.Visible = false;
_ExcelApp.UserControl = true;
string fileName = @"D:\dizertatie\DemoExcel.xlsx";
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = System.IO.Directory.GetParent(fileName).FullName;
ofd.FileName = fileName;
ofd.Title = "Select Excel file to open.";
ofd.ShowDialog();
fileName = System.IO.Path.Combine(Directory.GetParent(ofd.FileName).FullName, Path.GetFileName(ofd.FileName));
CultureInfo oldCI = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
//open the workbook
Workbook workbook = _ExcelApp.Workbooks.Open(fileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
//select the first sheet
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
//find the used range in worksheet
Microsoft.Office.Interop.Excel.Range ExcelRange = worksheet.UsedRange;
//get an object array of all of the cells in the worksheet (their values)
object[,] valueArray = (object[,])ExcelRange.get_Value(
XlRangeValueDataType.xlRangeValueDefault);
listView1.Items.Clear();
for(int col = 1; col <= worksheet.UsedRange.Columns.Count; ++col)
{
listView1.Columns[col-1].Text = (valueArray[1, col] != null) ? valueArray[1, col].ToString() : string.Empty;
}
//access the cells
for(int row = 2; row <= worksheet.UsedRange.Rows.Count; ++row)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = (valueArray[row, 1] != null) ? valueArray[row, 1].ToString() : string.Empty;
for(int col = 2; col <= worksheet.UsedRange.Columns.Count; ++col)
{
//access each cell
lvi.SubItems.Add(valueArray[row, col].ToString());
}
listView1.Items.Add(lvi);
}
//clean up stuffs
workbook.Close(false, Type.Missing, Type.Missing);
Marshal.ReleaseComObject(workbook);
_ExcelApp.Quit();
Marshal.FinalReleaseComObject(_ExcelApp);
Thread.CurrentThread.CurrentCulture = oldCI;
MessageBox.Show("Fisierul Excel a fost incarcat cu succes!");
}
Functia cu ajutorul careia formatam datele de intrare
Cu ajutorul acestei functiei AddText(…) vom putea sa setam fontul datelor citite din documentul Excel, se poate seta tipul fontului, daca sa fie bold sau italic, culoarea textului si unde sa fie pozitionat.
Functia AddText(…) va fi apelata pentru fiecare celula din Excel(camp) in parte, astfel vom putea sa formatam fiecare cuvant separat. Apelul functie se va face in interiorul fiecarei functii de generare a documentului Word.
Functia AddText(…) este una din cele mai importante functii pentru ca se ocupa efectiv de fiecare celula citita din fisierul de input, de acceea trebuie sa ne asiguram ca functioneaza corect.
private Word.Range AddText(string text, string fontName, short fontSize, bool isBold, bool isItalic, Word.WdColor fontColor, Word.WdParagraphAlignment fontAlignment, float leftIdent, object style)
{
if (fontSize < 0)
fontSize = 0;
// Set up the header information.
start = 0;
end = 0;
Word.Range rng = GetBookmark(ref oEndOfDoc).Range;
Daca nu avem selectat un stil anume alegem stilul default
if (style != Type.Missing)
{//custom style
rng.set_Style(ref style);
}
rng.InsertBefore(text);
rng.Font.Name = fontName;
rng.Font.Size = fontSize;
if (isBold)
{
rng.Bold = 1;
}
if (isItalic)
{
rng.Italic = 1;
}
rng.Font.Color = fontColor;
rng.ParagraphFormat.LeftIndent = leftIdent;
SetAlignText(fontAlignment);
return rng;
}
Functia de creare a documentului Word
Functia CreateWordDocument() a fost implementata si are ca scop deschiderea unui document Word si pregatirea acestuia pentru a putea sa introducem datele citite in document.
In aceasta functie se realizeaza setariile initiale ale documentului marginile pagini, tipul pagini, orientarea acestuia etc.
Apelul functiei CreateWordDocument() este facut inainte sa pornim generarea de diplome sau adeverinte chiar inainte de apelul efectiv al uneia dintre functiile ce se ocupa de generarea diplomelor sau a adeverintelor. Dupa terminarea executie functiei de creare a documentului Word se va face apelul functiei pentru scrierea datelor in documentul creat anterior.
private void CreateWordDocument()
{
//Start Word and create a new document
Word.Application oWord = new Word.Application();
object oMissing = System.Reflection.Missing.Value;
Crearea unui document Word fara nici o informatie.
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
oDoc.Range(ref start, ref end).Delete(ref unit, ref count);
Se fac setarile pentru tipul pagini si orientarea acesteia.
oDoc.PageSetup.PaperSize = Word.WdPaperSize.wdPaperA4;
oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;
Se fac setarile si pentru marginiile pagini.
oDoc.PageSetup.LeftMargin = 36;
oDoc.PageSetup.RightMargin = 36;
oDoc.PageSetup.TopMargin = 36;
oDoc.PageSetup.BottomMargin = 50;
Se seteaza vizibilitatea documentului, updatarea documentului in timp real, daca sa se afiseze erorile gramaticale si erorile de sintaxa.
oWord.Visible = docVisible;
oWord.ScreenUpdating = docUpdate;
oDoc.ShowGrammaticalErrors = false;
oDoc.ShowSpellingErrors = false;
oDoc.PageSetup.DifferentFirstPageHeaderFooter = 0;
Word.Range endRange = GetBookmark(ref oEndOfDoc).Range;
endRange.set_Style(ref nStyle);
}
Functii pentru generarea diplomelor si adeverintelor
Functiile GenerareDiploma(),GenerareConcurs(),GenerareAdeverinta() au in principiu acelasi scop, de a genera diplome de merit, diplome ale unui concurs sau adeverinte. Au fost implemante trei functii diferite deoarece dorim sa afisam 3 tipuri diferite de documente Word.
Fiecare document avand un format diferit si campuri diferite. Apelul functiilor se va face in functie de checkbox-ul ales de utilizator, dupa ce utilizatorul va apasa butonul Export to Word.
In continuarea vom explica implementarea doar pentru o functie deoarece implementarea celorlalte functii este asemanatoare.
Selectam directorul din care sa fie incarcata poza.
Object fileName = Environment.CurrentDirectory + "\\BackgroundDiploma.png";
Object linkToFile = false;
Object saveWithDocument = true;
Object mising = Type.Missing;
int Nr_row = 0;
Citim rand pe rand date stocate in listview.
for (int row = 0; row < listView1.Items.Count; row++)
{
Word.Range rng = GetBookmark(ref oEndOfDoc).Range;
rng.ParagraphFormat.LeftIndent = 0;
Creem un obiect cu rol de container pentru poza.
Word.InlineShape wis;
if (System.IO.File.Exists(fileName as string))
{
Adaugam poza in documentul Word si setam dimensiunea ei.
wis = rng.InlineShapes.AddPicture(fileName as string
, ref linkToFile, ref saveWithDocument, ref mising);
wis.Width = (float)784;
wis.Height = (float)536;
Activarea optiuni de scriere de text peste poza.
Microsoft.Office.Interop.Word.Shape shape = wis.ConvertToShape();
shape.WrapFormat.Type = Word.WdWrapType.wdWrapBehind;
}
Scrierea tuturor informatiilor prezente in Excel.
AddText("ROMANIA", STR_TIMES_NEW_ROMAN, 18, true, false, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
InsertParagraph(2);
AddText("DIPLOMA DE MERIT", STR_TIMES_NEW_ROMAN, 28, true, false, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
InsertParagraph(1);
AddText(" ", STR_TIMES_NEW_ROMAN, 12, true, false, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing); //do this just for changing the font size
InsertParagraph(2);
AddText("Domnului ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[1].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", absolvent al ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[2].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", din localitatea ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[3].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", judetul ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[4].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", profilul ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[5].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", specializarea ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[6].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", avand C.N.P. ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(listView1.Items[row].SubItems[7].Text, STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorRed, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
AddText(", i se acorda ", STR_TIMES_NEW_ROMAN, 12, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphJustify, 30, Type.Missing);
InsertParagraph(2);
AddText("DIPLOMA DE MERIT", STR_TIMES_NEW_ROMAN, 20, true, false, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
Nr_row++;
if (Nr_row != listView1.Items.Count)
InsertPageBreak(GetBookmark(ref oEndOfDoc).Range);
}
Afisarea mesajului de generare cu success si setarea checkbox-ului la valoarea initiala.
MessageBox.Show("Generarea diplomelor de merit s-a realizat cu succes!");
checkboxDiploma.Checked = false;
}
Pentru generarea diplomelor de concurs am tratat separat generarea locurilor 1, 2, 3, restul diplomelor vor fi generate de tipul mentiune.
if (listView1.Items[row].SubItems[0].Text.Equals("1"))
{
AddText(" PREMIUL I ", STR_TIMES_NEW_ROMAN, 36, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
}
else if (listView1.Items[row].SubItems[0].Text.Equals("2"))
{
AddText(" PREMIUL II ", STR_TIMES_NEW_ROMAN, 36, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
}
else if (listView1.Items[row].SubItems[0].Text.ToString().Equals("3"))
{
AddText(" PREMIUL III ", STR_TIMES_NEW_ROMAN, 36, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
}
else
{
AddText(" MENTIUNE ", STR_TIMES_NEW_ROMAN, 36, true, true, Word.WdColor.wdColorBlack, Word.WdParagraphAlignment.wdAlignParagraphCenter, 30, Type.Missing);
}
Functii utilizate in formatarea documentului Word
Functia InsertPageBreak() are rolul de a introduce o pagina noua in care sa scriem datele pentru urmatoarea diploma. Apelul functie se executa dupa ce s-a terminat de generat o diploma si incepe generarea urmatoarei diplome.
private void InsertPageBreak(Word.Range rng)
{
object brk = Word.WdBreakType.wdPageBreak;
rng.InsertBreak(ref brk);
}
Functia InsertParagraph(int count) are rolul de a introduce o unul sau mai multe randuri noi in functie de valoarea paramatrului count . Apelul functie se executa de fiecare data cand dorim sa trecem la un rand nou.
private void InsertParagraph(int count)
{
Word.Range rng = GetBookmark(ref oEndOfDoc).Range;
for(int i = 0; i < count; i++)
rng.InsertParagraphAfter();
}
Functia SetAlignText(Word.WdParagraphAlignment wdpa) are rolul de a alinia textul citit folosind proprietatile programului Word AlignJustify, AlignCenter, AlignLeft si AlignRigth. Apelul functie se executa in functia AddText(…)de fiecare data cand dorim sa scriem textul in documentul Word.
private void SetAlignText(Word.WdParagraphAlignment wdpa)
{
Word.Range rng = GetBookmark(ref oEndOfDoc).Range;
rng.ParagraphFormat.Alignment = wdpa;
}
CONCLUZII ȘI DEZVOLTĂRI ULTERIOARE
Microsoft Visual Studio pune la dispozitie toate instrumentele necesare realizarii si implementarii de tool-uri care ne pot ajuta si ne pot imbunatati activitatea de zi cu zi. In concluzie, pot spune ca aplicatia realizata e utila, atat celor care o folosesc cat si studentiilor (elevilor), deoarece timpul de asteptare pentru eliberarea adeverintelor sau diplomelor este mai scazut si totul se va putea realiza mult mai usor.
Un avantaj al aplicatiei prezentate este faptul ca se pot genera adeverinte si diferite tipuri de diplome intr-un timp foarte scurt, utilizand doar un simplu fisier Excel in care avem stocate datele persoanelor carora vrem sa eliberam aceste documete. Astfel, daca fisierul Excel incarcat in aplicatie este completat corect, totul se va realiza automat si nu va mai fi nevoie de alte completari.
Utilitatea si importanta aplicatiei se observa cel mai bine intr-o universitate, facultate, liceu sau chiar scoala generala, deoarece in aceste institutii exista multi studenti/elevi, iar generarea de diplome sau adeverinte ar deveni mult mai rapida si datele generate corecte.
Pentru a putea realiza aplicatia a fost nevoie de librariile Microsoft.Interop.Word si Microsoft.Interop.Excel fara de care nu am fi putut realiza conexiunea intre aplicatie si programele Office Word respectiv Excel.
În concluzie, la sfârșitul implementării aplicației am reușit să realizez: conexiunea intre aplicatiile Microsoft Visual Studio 2012 si Microsoft Office, citirea unui fisier Excel, afisarea informatiilor prezente in interfata aplicatiei si salvarea datelor intr-un obiect de tip ListView.
De asemenea,am realizat si generarea a trei tipuri de documente Word (diploma de merit, diploma de concurs si adeverinta) prin implementarea a trei functii: GenerareDiploma() folosita pentru a genera diplomere de merit, GenerareConcurs() folosita pentru diplomele de concurs, GenerareAdeverinta() folosita pentru generarea adeverintelor si utilizand trei checkbox-uri care fac selectia intre acestea.
O posibila dezvoltare ulterioara ce poate fi adusa prezentei lucrări ar putea fi implementarea unei functii care sa tipareasca automat diplomele la sfarsitul generari acestora sau sa converteasca documentul in PDF. Acest lucru este poate fi implementat folosind un checkbox in care utilizatorul va selecta daca doreste sa tipareasca documentul automat folosind o imprimanta sau sa il converteasca in PDF. În lucrarea prezentată, tiparirea documentului se face manual de catre utilizator.
De asemenea, o altă posibilă îmbunătățire ar fi crearea unui buton si implementarea in spatele butonului unei functii care sa ofere posibilitatea transmiterii documentului pe email.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Integrarea Ms Office Si Visual Studio (ID: 149931)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
