StringGrid și Excel lucrează împreună. Accesarea Excel din Delphi

Multe documente sunt create și stocate în format de foaie de calcul Microsoft Excel. În ciuda faptului că aceste tabele au capacitatea de a procesa automat un document, nouă, Delphiștii, ni se pare mult mai plăcut să lucrăm într-un mediu familiar, care are și capabilități mult mai dezvoltate. Să vedem cum să obținem date din Excel. Desigur, vom plasa datele tabulare în tabelul StringGrid familiar.

Pentru a lucra cu Excel și alte programe din pachetul Microsoft Office, trebuie să adăugați la listă utilizări Modulul ComObj:

unitate Unitatea 1;

interfata

utilizări
Windows, Mesaje, SysUtils, Variante, Clase, Grafică, Controale, Formulare,
Dialoguri, StdCtrls, Grile, ComObj;

var
Form1: TForm1;
Excel: Varianta;

Apoi, trebuie să creați un obiect Excel. Aplicația Excell este creată goală, fără tabele, așa că trebuie să adăugați cel puțin un registru de lucru. Acest lucru trebuie făcut într-un fel de handler, de exemplu un handler de clic pe buton, deși o puteți face imediat în OnCreate of the Form:

Excel:=CreateOleObject("Excel.Application");
Excel.Application.WorkBooks.Add(„Nume_Fișier.xls”);

Dacă este creat un registru de lucru gol, metoda Add este aplicată fără un parametru - fără un nume de fișier. Desigur, puteți solicita utilizatorului să selecteze un fișier:

cu OpenDialog1 do
dacă A executa apoi
Excel.Application.WorkBooks.Add(FileName);

Pentru depanare, este necesar ca tabelul Excel să fie vizibil și, de asemenea, este mai bine să dezactivați adresarea întrebărilor despre salvarea datelor la închidere:

Excel.Visible:=Adevărat; //După depanare, puteți comenta această linie
Excel.DisplayAlerts:=False;

Creați imediat o metodă pentru închiderea obiectului Excel, altfel în timpul depanării și chiar și atunci când utilizatorul lucrează pe computer, atât de multe procese Excel invizibile vor genera acea mamă dragă!... În handlerul OnCloseQuery al Formularului, scrieți:

încerca
Excel.Quit;
cu exceptia
Sfârşit;
CanClose:=Adevărat;

Desigur, Excel va fi părăsit, iar apoi întreaga aplicație se va închide. Dar dacă trebuie să continuăm să lucrăm cu programul după închiderea procesului Excel, atunci acest cod este plasat în manipulatorul de clic pe buton. Cu toate acestea, în acest caz, nu este suficient. Încercați și veți vedea când vă uitați la lista de procese din Task Manager că procesul nostru Excel este viu și bine! Acest lucru s-a întâmplat deoarece rămâne asociat cu variabila care a creat-o (Excel). Pentru a distruge efectiv un proces, trebuie să rupeți această conexiune. Completați codul de mai sus cu linia:

Excel:=Neatribuit;

Și când facem clic pe butonul de închidere, Excel-ul nostru va dispărea din lista de procese.

Acum trebuie să obțineți datele din Excel. În Excel, coloanele sunt denumite prin litere, dar în Delphi ne referim la ele ca de obicei, prin numere de serie. Vă rugăm să rețineți că, deoarece în Delphi indexul coloanei este primul în index, iar într-un tabel Excel indexul rândurilor este primul, indicii trebuie să fie amplasați în locuri opuse. În manerul de clic pe butonul:

cu StringGrid1 do
pentru i:=1 la RowCount-1 do
pentru j:=1 la ColCount-1 do
Cells:=Excel.WorkSheets.Item["Sheet1"].Cells;

Un mic avertisment: dacă verificați introducerea datelor în timpul depanării, atunci înainte de a apăsa butonul nostru trebuie să finalizați intrarea în Excel - apăsați Enter. La urma urmei, dacă celula tabelului Excel rămâne în modul de editare, atunci vom primi un refuz de la Excel.
Și mai departe. Datele din Excel sunt abordate începând de la 1. O încercare de a obține conținutul celulelor fixe eșuează. Prin urmare, dacă este necesar, celulele fixe din tabelul StringGrid trebuie completate separat.

Și puteți obține conținutul unei celule fie specificând numărul rândului și coloanei, fie specificând direct adresa celulei:

var S1, S2: Şir;
ÎNCEPE
S1:=Excel.WorkSheets.Item[„Sheet1”].Cells;
S2:=Excel.WorkSheets.Item["Sheet1"].Range["F5"];
Sfârşit;

Variabilele S1 și S2 vor avea aceeași valoare.

Acum, în tabelul StringGrid avem date de procesat și de a face cu ele ceea ce dorim. Apoi, puteți transfera datele procesate înapoi într-o foaie de calcul Excel. Acest lucru se face într-un mod complet similar, în handlerul de clic al altui buton:

pentru i:=1 la Grid.RowCount-1 do
pentru j:=1 la Grid.ColCount-1 do
Excel.WorkSheets.Item["Sheet1"].Cells:=Grid.Cells;

Dacă aceste operații sunt efectuate cu o foaie Excel activă, atunci puteți scurta scrierea și, în schimb:

Excel.WorkSheets.Item[„Sheet1”].Celele

Excel.Celele

Sau puteți crea o variabilă și îi atribuiți valoarea foii Excel cu care lucrați:

var Foaie: Varianta;
S1, S2: șir;
ÎNCEPE
Sheet:=Excel.WorkSheets.Item["Sheet1"];
S1:=Foaie.Celule;
S2:=Sheet.Range["F5"];
Sfârşit;

Rețineți că tabelul poate conține nu numai date direct în celule, ci și formule. Când scrieți date din tabelul nostru StringGrid, totul, cu excepția textului propriu-zis scris, va fi distrus!

În cele din urmă, trebuie să forțați tabelul Excel să salveze datele procesate:

Excel.ActiveWorkbook.SaveAs(„Nume_Fișier”);// Sau SaveAs("OpenDialog1.FileName");

Puteți imprima raportul. Iată cum este definită funcția de imprimare:

funcţie Imprima(
Din: Varianta; //Nu este necesar. Numărul paginii de la care începe imprimarea.
Către: Varianta; //Nu este necesar. Numărul paginii pe care continuă imprimarea.
Exemplare: Varianta; //Nu este necesar. Numarul copiilor.
Previzualizare: Varianta; //Nu este necesar. Previzualizare ( Adevărat sau Fals).
ActivePrinter: Varianta; //Nu este necesar. Numele imprimantei active.
PrintToFile: Varianta; Adevărat imprimarea va merge la un fișier.
Colat: Varianta //Nu este necesar. Când valoare Adevărat Copiile paginilor sunt îmbinate.
): Caiet de lucru;

Puteți utiliza această funcție ca metodă a unei variabile care indică pagina - Foaie(De asemenea Excel.ActiveWorkBook sau Excel.Foaie de lucru):

Sheet.PrintOut(1, 1, 1, False, True);

Imprimarea se va face de la prima pagină la prima, o copie, fără previzualizare, fără a specifica o imprimantă - imprimarea se duce la un fișier. Mai întâi vi se va solicita să specificați un nume de fișier. Se creează un fișier de tip *.xps. Pentru a-l vizualiza aveți nevoie de programe speciale.

Desigur, în Delphi puteți efectua și formatarea celulelor și alte operațiuni cu un tabel Excel. Voi adăuga aceste informații puțin mai târziu. Deocamdată este suficient pentru prima dată.

Lucrul cu regiunea celulei Excel

Aș dori să continui cu faptul că citirea și scrierea datelor dintr-o singură celulă necesită destul de mult timp - probabil ați observat deja. Există o modalitate de a accelera acest proces. Pentru a face acest lucru, trebuie să stăpâniți operațiuni simple de lucru cu o regiune de celule Excel.

Regiunea celulelor tabelului Excel are, de asemenea, tipul Variant și este specificată printr-un dreptunghi care indică celulele din stânga sus și din dreapta jos:

Gama Var: Variant;
ÎNCEPE

Sfârşit;

În special, o regiune poate consta dintr-o celulă:

Interval:=Excel.Range, Excel.Cells];

Această intrare este mai ușor de făcut, indicând adresa ca într-un tabel Excel:

Interval:=Excel.Range["A1"];

De asemenea, puteți specifica o regiune dreptunghiulară dacă cunoașteți numele celulelor. Iată regiunea 4x4:

Interval:=Excel.Range["A1:D4"];

Iată cum să copiați o regiune de celule Excel de 100X100 într-un tabel StringGrid:

var Gama: Varianta;
i, j: întreg;
ÎNCEPE
Interval:=Excel.Range, Excel.Cells];
cu StringGrid1 do
pentru i:=1 la 100 do
pentru j:=1 la 100 do
Cells:=Range.Cells;
Sfârşit;

Asta e tot! Pe computerul meu, această operațiune de copiere a unei regiuni de 100x100 de celule Excel într-un tabel StringGrid durează aproximativ 300 ms, ceea ce este cu 2 ordine de mărime mai rapid decât citirea și scrierea unei celule odată.

Și, de exemplu, operația de introducere a unei singure valori în toate celulele unei regiuni este și mai simplă. Să adăugăm cuvântul „Bună ziua” în regiunea noastră de 100x100 definită mai sus:

Excel.Range, Excel.Cells]:="Bună ziua";

Curățarea regiunii se realizează folosind metoda Clear:

Excel.Range, Excel.Cells].Clear;

Schimbă date cu MS Excel V Delphi cu ajutor OLE.

Dragi colegi!

Cu toții, mai devreme sau mai târziu, ne confruntăm cu sarcina de a face schimb de date cu aplicațiile pachet MS Office. Unul dintre ei este MS Excel. Și în special despre interacțiunea cu acest produs MS Office va fi discutat în acest articol.

O modalitate de a interacționa Delphi c MS Excel- este să te conectezi la el ca OLE obiect.

Asa de.
În primul rând, cu care să lucrezi MS ExcelȘi OLE adăugați la secțiune Utilizări module ComObjȘi ActiveX.

Și primul lucru pe care trebuie să-l verificăm este dacă este instalat MS Excel pe computerul utilizatorului în principiu.
Pentru a face acest lucru, vom folosi funcția CLSIDFromProgID, care se uită în registru CLSID pentru cele transmise ProgID:
Ajutor de la MSDN: Metodă CLSIDFromProgID
Opțiuni:
pszProgID: PoleStr— Un șir cu numele obiectului
clsid: TCLSID— Indicator către structură TGUID la care se transferă obiectul găsit;
Se intoarce:
HRESULT— Rezultat, care poate lua următoarele valori:
S_OK— obiect găsit;
CO_E_CLASSSTRING— Înregistrat CLSID Pentru ProgID este invalid;
REGDB_E_WRITEREGDB— Eroare de scriere CLSID la registru.
Din rezultatele enumerate avem nevoie S_OK.
Să scriem o funcție pentru a determina prezența excela de la utilizator:

Funcția IsXlsInstall: boolean; var CLSID: TCLSID; începe Rezultatul:= (CLSIDFromProgID ("Excel.Application", CLSID) = S_OK); Sfârşit;

Dacă excela instalat, apoi să ne conectăm la el. Puteți face acest lucru în două moduri: GetActiveOleObject— Obțineți un link către o instanță care rulează deja excela sau CreateOleObject— Creați o instanță nouă excela.
Dacă avem o sarcină să primim date de la o rulare excela, atunci ar trebui să folosim doar prima opțiune, în alte cazuri încercăm să ne conectăm și dacă asta nu funcționează, atunci o creăm.
Să scriem 2 funcții de conectat XlsConnectși lansarea unuia nou XlsStart:
Să adăugăm o variabilă FXlsApp cu tip Variantă, care va conține o referință la obiect excela.

Private FXlsApp: varianta; *** funcția XlsConnect: boolean; începe Rezultat:= Fals; încercați FXlsApp:= GetActiveOleObject ("Excel.Application"); Rezultat:= Adevărat; cu excepția sfârșitului; Sfârşit; procedura XlsStart; începe FXlsApp:= CreateOleObject("Excel.Application"); Sfârşit;

Acum puteți adăuga un buton, când faceți clic, ne vom conecta MS Excel folosind funcțiile scrise:

Procedura btnConnectClick(Expeditor: TObject); începe dacă nu IsXlsInstall apoi ridică Exception.Create("Aplicația MS Excel nu a fost găsită pe acest computer!"); dacă nu XlsConnect, atunci XlsStart; FXlsApp.Visible:= Adevărat; Sfârşit;

Fereastra implicită excela rulează în fundal. Linia FXlsApp.Visible:= Adevărat; face o fereastră de fundal excela vizibil.

Fereastră excela Pornește unul gol și trebuie să adăugați un registru de lucru. Acest lucru se face folosind metoda WorkBooks.Add, care adaugă o carte nouă sau deschide una salvată anterior dacă specificați calea către fișier.
Să adăugăm o procedură care va face acest lucru:

Procedura XWorkbookAdd(const FilePath: string = ""); începe FXlsApp.WorkBooks.Add(FilePath); Sfârşit;

Cartea a fost adăugată, acum hai să încercăm să scriem ceva în ea.

FXlsApp.Cells := „Șir de testare”;

Unde Rând este indicele rândului și col— index de coloană care începe cu unul.

FXlsApp.Range["A1"] := "Celula A1";

Unde Gamă este o serie de celule și A1- familiar cu excela coordonatele celulei.
Un interval poate fi specificat ca coordonate. De exemplu, cod

FXlsApp.Range["A3:A10"] := 5;

va umple toate celulele cu numărul 5 A3 De A10, și codul

FXlsApp.Range["A3:A10"].Interior.Color:= clMoneyGreen;

va evidenția aceeași gamă în verde deschis.
În sens invers, adică pentru a obține date de la excela, functioneaza la fel. Linia

ShowMessage(FXlsApp.Cells);

Va afișa un mesaj cu conținutul celulei cu coordonatele: Rând=5, Coloană=1.

După ce am efectuat manipulările necesare cu excela, putem salva cartea rezultată într-un fișier cu următoarea comandă:

FXlsApp.ActiveWorkbook.SaveAs("C:\Test.xlsx");

Unde ActiveWorkbook- cartea curenta.
Și închideți aplicația excela comanda:

FXlsApp.Quit;

Cum înțelegeți aceste opțiuni de control? excela din Delphi nu sunt limitate. Și există o modalitate destul de simplă de a afla cum să efectuați acțiunea necesară excela din Delphi.
Se numește Macro-uri.

Să ne imaginăm că trebuie să unim mai multe celule într-una singură și nu știm cum să o facem. Dar vrem să aflăm. Pentru a face acest lucru, efectuăm următorii pași:
1. Lansați excelași creați o carte goală.
2. Rulați comanda „Înregistrare macrocomandă”; în mod implicit, numele macrocomenzii va fi „Macro1”. (În diferite versiuni excela Această comandă se află în diferite elemente de meniu).
3. Selectați un anumit interval de celule și faceți clic pe butonul „Merge and Place in Center”.
4. Opriți înregistrarea macro-ului.
5. Apelați lista de macrocomenzi și selectați macrocomanda înregistrată acolo.
6. Faceți clic pe butonul „Schimbare”.
Editorul începe Microsoft Visual Basic pentru aplicațieîn care vedem codul acțiunilor întreprinse:

Sub Macro1() " " Macro1 Macro " cu selecție .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False . .Merge End Sub

Să aruncăm o privire mai atentă la ceea ce ne-a scris aici:
Cu Selectie— Pentru intervalul de celule selectat, setați proprietățile:
HorizontalAlignment = xlCenter— Orientare orizontală = centrată.
VerticalAlignment = xlBottom— Orientare verticală — de-a lungul marginii inferioare.
WrapText = Fals— Împachetarea textului după cuvinte este dezactivată.
Orientare = 0— Orientare 0 grade.
AddIndent = Fals— Activarea/dezactivarea indentării automate.
IndentLevel = 0— Nivelul de indentare 0.
ShrinkToFit = Fals— Comprimați textul pentru a se potrivi coloanei activat/dezactivat.
ReadingOrder = xlContext— Ordinea de citire în funcție de context.
MergeCells = Fals— Pornirea/dezactivarea celulelor îmbinate
Se termina cu— Sfârșitul secțiunii de lucru cu intervalul selectat.
Selectie.Merge— Îmbinați intervalul selectat.

Acum să încercăm să îmbinăm celulele din Delphi:

Selectăm gama de care avem nevoie.

FXlsApp.Selection.MergeCells:= Adevărat;

Îmbinăm celulele setând proprietatea. Sau folosind metoda:

FXlsApp.Selection.Merge;

În acest fel puteți obține cod pentru aproape orice manipulare necesară.
Și dacă o proprietate sau o metodă ridică întrebări, puteți folosi ajutorul de pe MSDN.

Vă rugăm să rețineți particularitatea lucrului cu matrice în VBA. Indici în matrice în Delphi sunt împachetate între paranteze drepte, în timp ce în VBA vor fi rotunde. Și codul din Delphi

FXlsApp.Range["B5:C8"].Selectați;

V VBA va arăta ca

Interval("D5:H14").Selectați;

Mai jos voi da un mic FAQ pe problema interacţiunii cu excela din Delphi

Cum se definesc valori constante în Excel pentru utilizare în Delphi?

În editor VBA Am stabilit un punct de oprire opus constantei de interes. Faceți clic pe executare și când execuția se oprește, indicați constanta de interes:

Cum se dezactivează ieșirile de mesaje în Excel?

FXlsApp.DisplayAlerts:= False;

Cum să obțineți o listă de cărți din Excel?

Pentru i:= 1 la FXlsApp.Workbooks.Count do ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);

Cum se dezactivează afișarea grilei?

FXlsApp.ActiveWindow.DisplayGridlines:= Fals;

Cum să afișați foaia curentă ca previzualizare de tipărire?

FXlsApp.ActiveWindow.SelectedSheets.PrintPreview;

Cum să faci un text în celule aldine?

Var Rând: întreg; // Indice șir de caractere Col: întreg; // Index de celule TextSelStart: întreg; // Pornind de la caracterul TextSelLength: integer; // Numărul de caractere selectate începe FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True; Sfârşit;

Cum se potrivește automat înălțimea rândului pentru o celulă lipită?

Var merge_area: varianta; cell_width, cells_width, i: integer begin // Salvați intervalul de celule îmbinate într-o variabilă merge_area:= FXlsApp.Range["D5"].MergeArea; // Salvați lățimea celulei pentru care vom selecta înălțimea cell_width:= FXlsApp.Range["D5"].ColumnWidth; lățime_celule:= 0; pentru i:= 1 la merge_area.Columns.Count do // Obține lățimea totală a tuturor coloanelor din intervalul îmbinat cells_width:= cells_width + merge_area.Columns[i].ColumnWidth; // Anularea celulelor merge_area.UnMerge; // Setați lățimea celulei de interes egală cu lățimea totală FXlsApp.Range["D5"].ColumnWidth:= cells_width; // Apelați metoda standard pentru ajustarea automată a înălțimii rândului FXlsApp.Rows.EntireRow.AutoFit; // Returnează lățimea inițială a celulei de interes FXlsApp.Range["D5"].ColumnWidth:= cell_width; // Lipiți zona înapoi împreună merge_area.Merge; Sfârşit;

Cum să obțineți intervalul de celule utilizate?

Rezultat:= exApp.ActiveSheet.UsedRange;

Cum să obțineți o literă de coloană după index?

Folosește matematica; *** function ColIdxToStr(const Col: integer): string const CharsCount: integer = 26; Offset: întreg = 64; var Rank: octet; Col, Tmp: întreg; începe Rezultatul:= ""; în timp ce Col > 0 începe Rank:= 0; Tmp:=Col; în timp ce Tmp > CharsCount începe Tmp:= Ceil(Tmp / CharsCount - 1); Inc(Rang); Sfârşit; Rezultat:= Rezultat + Chr(Tmp + Offset); Col:= Col - Trunc(Putere(CharsCount,Rank)) * Tmp; Sfârşit; Sfârşit;

Poți să te oprești în fiecare etapă a acestui model și să-l studiezi luni de zile. Dacă există o nevoie specială de a studia orice proprietăți și metode suplimentare, cu siguranță ne vom întoarce și vom studia. Acum, să începem să lucrăm în Delphi cu foi de registru de lucru.

2. Cum se activează o foaie de registru de lucru Excel?

După cum știți când creați un registru de lucru gol excela adaugă automat 3 foi goale la acest registru de lucru. Pentru a lucra cu o anumită foaie ( Fisa de lucru sau pur și simplu Foaie) această foaie trebuie activată. O modalitate de a activa o foaie de registru de lucru excela V Delphi după cum urmează:

string de resurse rsEInvalidSheetIndex = „Index nevalid specificat pentru WorkBooks. Activarea foii a fost anulată”; rseInvalidSheetActivate = „Activarea foii finalizată cu eroare”; function ActivateSheet(WBIndex: integer ; SheetName: string ): boolean ; var i: întreg ; începe Rezultat: = fals; dacă WBIndex › MyExcel. Cărți de lucru. Numărați apoi ridicați excepția. Creați (rsEInvalidSheetIndex) ; încercați pentru i : = 1 la MyExcel. Cărți de lucru [WBIndex]. Foi. Se numără dacă AnsiLowerCase (MyExcel. WorkBooks [ WBIndex]. Sheets . Item [ i]. Name ) = AnsiLowerCase (SheetName) apoi începe MyExcel. Cărți de lucru [WBIndex]. Foi. Elementul[i]. Activati ​​; Rezultat: = adevărat; pauză; Sfârşit ; cu excepția ridicării Excepție. Creați (rsEInvalidSheetActivate); Sfârşit ; Sfârşit ;

Aici, parametrii funcției sunt setați la indexul registrului de lucru (WBIndex) din colecție Cărți de lucruși numele foii.

Dacă doriți, puteți activa aceeași foaie după index în colecție Fișe de lucru- în același timp, funcția în sine este ușor simplificată (nu este necesară condiția de verificare a numelui foii).

De asemenea, dacă sunteți sigur că registrul de lucru de care aveți nevoie este activ la un moment dat, atunci puteți evita utilizarea unei variabile suplimentare (indexul registrului de lucru WBIndex) și să activați foaia astfel:

MyExcel. ActiveWorkBook. Foi. Elementul[i]. Activati ​​;

Acum să aruncăm o privire mai atentă la metodele folosite de obiect Fisa de lucru.

3. Metode de foi de lucru Excel

Acum să privim obiectul mai detaliat Fisa de lucru.

Figura arată metodele pe care le-am folosit vreodată în munca mea.

Obiect total Fisa de lucru totaluri 30 diferite metode pe care le poți folosi.

Metodă Descriere
Activati Activează foaia curentă. Am discutat deja cum funcționează metoda.
numără toate registrele de lucru deschise, o anumită foaie dintr-un registru de lucru sau un interval specificat de celule dintr-o foaie de lucru
verificați ortografia pe foaia selectată
salvează toate modificările aduse fișierului
șterge foaia curentă Fisa de lucru
selecția foii
copiază foaia în altă locație din registrul de lucru
lipește conținutul clipboard-ului într-o foaie de lucru
returnează un obiect care reprezintă fie o singură diagramă (obiect ChartObject ChartObjects) pe foaie
mutand foaia. Această metodă este similară cu metoda Copie. Singura diferență este că, după lipire, foaia copiată este ștearsă din carte

Să luăm acum în considerare fiecare dintre metodele prezentate mai sus.

Mai jos, ca expresie foaia ar trebui să iasă în afară ( Fisa de lucru), dacă nu se specifică altfel.

Metoda de calcul

Calculați un registru de lucru, o foaie sau un interval de celule.

Este de remarcat faptul că apelul de metodă calculati este posibil nu numai pentru o anumită foaie de lucru dintr-un registru de lucru Excel. Să ne uităm la opțiunile de apelare a metodei Calculate.

var MyExcel: OleVariant; MyExcel. calculati

fragmentul de cod de mai jos calculează foaia activă

MyExcel. ActiveWorkBook. ActiveWorkSheet. calculati

Să calculăm toate formulele din coloanele A, B și C:

MyExcel. ActiveWorkBook. ActiveWorkSheet. UsedRange. Coloane ("A:C"). calculati

Metoda de verificare a ortografiei

Apelul de metodă arată astfel:

expresie. Verificați ortografia (Dicționar personalizat, Ignorați majuscule, Sugerați întotdeauna, SpellLang)

În același timp ca expresie foaia ar trebui să iasă în afară ( Fisa de lucru).

Parametru Tip Descriere
Dicționar personalizat Variantă Cu un șir care specifică numele fișierului dicționar utilizator care va fi luat în considerare dacă cuvântul nu se găsește în dicționarul principal. Dacă acest argument este omis, va fi folosit dicționarul implicit
IgnoraMajuscule Variantă Adevărat, dacă este necesar, astfel încât Microsoft Excel a omis cuvintele care au fost scrise cu majuscule. Fals pentru a Microsoft Excel verifica toate cuvintele. Dacă acest argument este omis, se utilizează setările curente Excel.
ÎntotdeaunaSugerează Variantă Adevărat, pentru a Microsoft Excel a afișat o listă de sugestii pentru alte ortografii atunci când a fost detectat un cuvânt scris incorect. Fals, la Microsoft Excel Am așteptat să fie introdusă ortografia corectă. Dacă acest argument este omis, se utilizează setările curente.
SpellLang Variantă limbajul dicționarului. Poate lua valorile uneia dintre constante MsoLanguageID , de exemplu pentru limba rusă SpellLang = 1049, pentru engleză (SUA) SpellLang = 1033 etc. Mai multe detalii despre identificatorii de limbă.

Cum se verifică gramatica pe foaia Excel în Delphi?

MyExcel. ActiveWorkBook. ActiveWorkSheet. Verificați ortografia (CustomDictionary:=EmptyParam, IgnoreUppercase:=false, AlwaysSuggest:=EmptyParam, SpellLang:=1033)

în acest caz, MS Excel va verifica foaia de lucru curentă, inclusiv verificarea cuvintelor cu majuscule. Limba de verificare este rusa. Vă rugăm să rețineți că, pentru a apela metoda, am specificat în mod explicit ce parametru să atribuiți ce valoare. Mai mult, pentru a sări peste orice parametru, am folosit EmptyParam(parametru gol), care este în Delphi este o variabilă de tip OleVariant.

Este clar că această metodă de apelare a metodelor (cu indicarea explicită a tuturor parametrilor) nu este în întregime convenabilă pentru dvs. și nu este practicată pe scară largă în programarea în limba engleză. Delphi , dar cu toate acestea, aceasta este singura modalitate și nici o altă modalitate de a apela metodele utilizate în excela .

Metoda SaveAs

Salvarea unei foi de lucru Excel.

Apel de metodă:

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Local)
Parametru Tip Descriere
Nume de fișier Variantă un șir reprezentând numele fișierului de salvat. Trebuie să specificați calea completă către fișier, altfel fișierul va fi salvat în folder excela .
Tipul fisierului Variantă Formatul de fișier care este utilizat la salvare. În mod implicit, fișierul este salvat în formatul în care ați selectat ultima dată Excela.
Parola Variantă parola pentru fișier (nu mai mult de 15 caractere). Parola face distincție între majuscule și minuscule.
WriteResPassword Variantă parola care va fi folosită pentru a face modificări în registrul de lucru. Dacă nu este specificată o parolă, cartea va fi deschisă în modul Numai citire.
ReadOnlyRecommended Variantă dacă parametrul este egal Adevărat, apoi la deschiderea unui fișier, pe afișaj va apărea un mesaj care recomandă ca fișierul să fie deschis doar pentru citire.
A crea copie de rezervă Variantă Adevărat, pentru a crea un fișier de rezervă
AddToMru Variantă Adevărat, pentru a adăuga numele fișierului salvat la lista fișierelor deschise recent din meniul principal excela
TextCodepageȘi TextVisualLayout Variantă nu este utilizat în prezent și păstrat pentru compatibilitate cu versiunea inversă
Local Variantă parametru opțional, implicit este egal cu Fals.Sens Adevărat- salvarea fișierelor cu limba Microsoft Excel (inclusiv setările panoului de control).

MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs("C\:MyExcelFile.xls")

În acest caz, setările implicite vor fi utilizate la salvare.

Dacă trebuie să salvați fișierul Excel într-un format diferit, atunci în parametru Tipul fisierului puteți utiliza una dintre valorile enumeratorului xlFileFormat . Câteva sensuri xlFileFormat sunt prezentate în tabelul de mai jos:

Nume Sens Descriere Extensie de fișier
xlCSV6 CSV*.csv
xlExcel856 Caiet de lucru Excel 97-2003*.xls
xlHtml44 format HTML*.htm; *.HTML
xlOpenDocumentSpreadsheet60 OpenDocument Spreadsheet*.ods
xlOpenXMLWorkbook51 Deschideți cartea XML*.xlsx

Să scriem o mică procedură care vă permite să salvați o foaie Excel în diferite formate:

const xlCSV = 6 ; xlExcel8 = 56; xlHtml = 44; xlOpenDocumentSpreadsheet = 60 ; xlOpenXMLWorkbook = 51 ; string de resurse rESaveActiveSheet = „Eroare la salvarea foii de lucru active”; procedura SaveAs(const AFileName: TFileName; AFileFormat: integer) ; începeți să încercați MyExcel. ActiveWorkBook. Foaie activă. SaveAs(AFileName, AFileFormat); cu excepția ridicării Excepție. Create(rsESaveActiveSheet); Sfârşit ; Sfârşit ;

Metoda de ștergere

Ștergeți o foaie de lucru Excel.

MyExcel.ActiveWorkBook.WorkSheets.Item.Select

Selectează a treia foaie a registrului de lucru

Metoda de copiere

Copiați o foaie într-o altă locație din registrul de lucru.

Apel de metodă:

expression.Copy(Înainte, După)

Cu toate acestea, dacă utilizați parametrul Inainte de, atunci nu ar trebui să utilizați După si invers. Permiteți-mi să vă atrag atenția asupra faptului că este indicată FIȘA, și nu indexul foii.

Cum se copiază foaia Excel în Delphi?

MyExcel.ActiveWorkBook.WorkSheets.Item.Copy(After:=MyExcel.ActiveWorkBook.WorkSheets.Item)

În acest caz, prima foaie va fi copiată și lipită după a treia.

Metoda lipirii

Lipiți conținutul clipboard-ului într-o foaie Excel.

Apel de metodă:

expression.Paste(Destinație, Link)

Cum să lipiți conținutul clipboard-ului în foaia Excel în Delphi?

MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destinație:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))

În acest caz, conținutul tamponului va fi inserat în coloana D în rândurile de la 1 la 5. Trebuie remarcat faptul că, dacă conținutul tamponului nu îndeplinește condiția, de exemplu, există doar un număr în tampon, apoi se aruncă o excepție.

Metodă ChartObjects

Returnează un obiect care reprezintă fie o singură diagramă (obiect ChartObject) sau colecția tuturor diagramelor (obiect ChartObjects) pe foaie.

Apel de metodă:

expresie.ChartObjects

Cum să obțineți o diagramă într-o foaie Excel în Delphi?

MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects

În acest caz, primul va fi primit.

Metoda de mutare

Mutarea unei foi. Această metodă este similară cu . Singura diferență este că, după lipire, foaia copiată este ștearsă din carte.

Iată partea din metodele pe care le-am folosit vreodată când lucrez excela V Delphi . În general se poate spune că în Delphi poate fi controlat MS Excel nu mai rău decât atunci când lucrați direct cu această aplicație, principalul lucru este să nu uitați ce metodă sau proprietate este responsabilă pentru ce :). Ei bine, pentru a nu uita, am creat un mic MindMap, pe care îl voi completa și actualiza periodic. Făcând clic pe link, puteți vedea obiectele Excel, metodele pe care le folosesc, parametrii metodei și tipurile lor în conformitate cu tipurile Delphi. În general, o mică fișă grafică pentru cei cărora le place să joace cu Excel în Delphi.

Această recenzie discută despre modelele de bază care vă permit să accesați un registru de lucru Excel de la DELPHI.

Organizarea accesului la cartea EXCEL

Pentru a interacționa cu MS Excel în program trebuie să utilizați modulul ComObj
folosește ComObj;
și declarați o variabilă pentru a accesa MS Excel de următorul tip:
var Excel: Variant;

În cel mai simplu caz, inițializarea unei variabile Excel se poate face astfel:
Excel:= CreateOleObject("Excel.Application");

Crearea unei cărți noi:
Excel.Workbooks.Add;

Deschiderea unei cărți existente (unde calea este calea către fișierul cu extensia xls.):
Excel.Carete de lucru.Deschis;

Pentru a deschide un registru de lucru existent pentru doar citire:
Excel.Carete de lucru.Deschis;

Închiderea Excel:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;

Blocarea solicitărilor Excel (confirmări, notificări), de exemplu, blocarea unei solicitări de salvare a unui fișier:
Excel.DisplayAlerts:=False;

Afișați Excel pe ecran:
Excel.Visible:= Adevărat;
sau ascunde:
Excel.Vizibil:= Fals;

Imprimarea conținutului foii Excel active:
Excel.ActiveSheet.PrintOut;

Citirea/scrierea datelor în EXCEL

Puteți accesa o celulă din registrul de lucru Excel curent după cum urmează:
Excel.Range["B2"]:="Bună ziua!";- pentru a scrie o valoare într-o celulă sau
s:=Excel.Range["B2"]; - pentru citit,
unde B2 este adresa celulei.

Sau folosind stilul de legătură R1C1:
Excel.Range]:="Bună ziua!";, unde este coordonata celulei.

În general, puteți atribui orice valoare unei celule Excel (caracter, întreg, fracționar, dată), iar Excel va seta formatarea implicită în celulă.

Formatați celulele în EXCEL

Puteți selecta (selecta) un grup de celule pentru lucrări ulterioare, astfel:
Excel.Range, Excel.Cells].Select;
sau
Excel.Range["A1:C5"].Selectați;
în acest caz, se va selecta zona situată între celulele A1 și C5.

După ce ați făcut selecția, puteți seta:
1) fuzionarea celulelor
Excel.Selection.MergeCells:=Adevărat;
2) împachetarea cuvintelor
Excel.Selection.WrapText:=Adevărat;
3) alinierea orizontală
Excel.Selection.HorizontalAlignment:=3;
Când este setată la 1, alinierea implicită este utilizată, când este setată la 2, alinierea este stânga, 3 este centrat și 4 este dreapta.
4) alinierea verticală
Excel.Selection.VerticalAlignment:=1;
valorile atribuite sunt aceleași cu alinierea orizontală.
5) chenar pentru celule

Când este setată la 1, marginile celulelor sunt desenate cu linii subțiri și continue.
În plus, puteți specifica valori pentru proprietatea Borders, de exemplu, egale cu 3. Apoi va fi setat doar chenarul superior pentru blocul de selecție:
Excel.Selection.Borders.LineStyle:=1;
Valoarea proprietății Borders specifică o combinație diferită de margini ale celulei.
În ambele cazuri, puteți utiliza valori în intervalul de la 1 la 10.

Utilizarea parolelor în EXCEL

Setarea unei parole pentru registrul de lucru activ se poate face după cum urmează:
încerca
// încercarea de a seta o parolă
Excel.ActiveWorkbook.protect("trece");
cu exceptia
// acțiuni dacă încercarea de a seta o parolă eșuează
Sfârşit;

unde pass este parola de setat pentru carte.

Eliminarea unei parole dintr-o carte este similară, utilizați comanda
Excel.ActiveWorkbook.Unprotect("trece");

Setarea și eliminarea unei parole pentru foaia activă a unui registru de lucru Excel se face folosind comenzile
Excel.ActiveSheet.protect("trece"); // Seteaza parola
Excel.ActiveSheet.Unprotect("trece"); // elimina parola

unde pass este parola setată pentru a proteja cartea.

Operatii auxiliare in EXCEL

Eliminarea rândurilor cu schimbarea în sus:
Excel.Rânduri["5:15"].Selectați;
Excel.Selection.Delete;

La efectuarea acestor acțiuni, liniile de la 5 la 15 vor fi șterse.

Setați o zonă de înghețare pe foaia de lucru Excel activă
// dezgheață zona dacă a fost setată
Excel.ActiveWindow.FreezePanes:=Fals;
// selectează celula dorită, în acest caz D3
Excel.Range["D3"].Selectați;
// setează zona să fie înghețată
Excel.ActiveWindow.FreezePanes:=Adevărat;

Noroc!

Această recenzie discută constructele de bază care vă permit să accesați un registru de lucru Excel din Delphi.

Organizarea accesului la cartea EXCEL

Pentru a interacționa cu MS Excel într-un program, trebuie să utilizați modulul ComObj și să declarați o variabilă pentru a accesa tipul de variantă MS Excel.

folosește ComObj;
var Excel: Variant;

În cel mai simplu caz, puteți inițializa o variabilă Excel astfel:

Excel:= CreateOleObject("Excel.Application");

Crearea unei cărți noi:

Excel.Workbooks.Add;

Deschiderea unei cărți existente (unde calea este calea către fișierul cu extensia xls.):

Excel.Carete de lucru.Deschis;

Pentru a deschide un registru de lucru existent pentru doar citire:

Excel.Carete de lucru.Deschis;

Închiderea Excel:

Excel.ActiveWorkbook.Close;
Excel.Application.Quit;

Blocarea solicitărilor Excel (confirmări, notificări), de exemplu, blocarea unei solicitări de salvare a unui fișier:

Excel.DisplayAlerts:=False;

Afișați sau ascundeți Excel pe ecran:

Excel.Visible:= Adevărat;
Excel.Vizibil:= Fals;

Imprimarea conținutului foii de lucru Excel activă:

Excel.ActiveSheet.PrintOut;

Citirea/scrierea datelor în EXCEL

Puteți accesa o celulă din registrul de lucru Excel curent după cum urmează:

Excel.Range["b2"]:="Bună ziua!"; // scrie o valoare într-o celulă
s:=Excel.Range["b2"]; // citirea valorii din celulă

Unde b2 este adresa celulei.

Sau folosind stilul de legătură R1C1:

Excel.Range]:="Bună ziua!";

Unde este coordonata celulei.

În general, puteți atribui orice valoare unei celule Excel (caracter, întreg, fracționar, dată), iar Excel va seta formatarea implicită în celulă.

Formatați celulele în EXCEL

Puteți selecta (selecta) un grup de celule pentru lucrări ulterioare, astfel:

Excel.Range, Excel.Cells].Select;
// fie
Excel.Range["A1:C5"].Selectați;

În acest caz, zona situată între celulele A1 și C5 va fi selectată.

După ce ați făcut selecția, puteți seta:
1) Îmbinarea celulelor:

Excel.Selection.MergeCells:=Adevărat;

2) împachetarea cuvintelor:

Excel.Selection.WrapText:=Adevărat;

3) Alinierea orizontală:

Excel.Selection.HorizontalAlignment:=3;

Când este setată la 1, alinierea implicită este utilizată, când este setată la 2, alinierea este stânga, 3 este centrat și 4 este dreapta. 4) Alinierea verticală

Excel.Selection.VerticalAlignment:=1;

Valorile atribuite sunt aceleași cu alinierea orizontală.
5) Chenar pentru celule:

Când este setată la 1, marginile celulelor sunt desenate cu linii subțiri și continue.
În plus, puteți specifica valori pentru proprietatea Borders, de exemplu, egale cu 3. Apoi va fi setat doar chenarul superior pentru blocul de selecție:

Excel.Selection.Borders.LineStyle:=1;

Valoarea proprietății Borders specifică o combinație diferită de margini ale celulei.
În ambele cazuri, puteți utiliza valori în intervalul de la 1 la 10.

Utilizarea parolelor în EXCEL

Setarea unei parole pentru registrul de lucru activ se poate face după cum urmează:

încerca
// încercarea de a seta o parolă
Excel.ActiveWorkbook.protect("trece");
cu exceptia
// acțiuni dacă încercarea de a seta o parolă eșuează
Sfârşit;

Unde pass este parola de setat pentru carte.

Eliminarea unei parole dintr-o carte este similară, utilizați comanda

Excel.ActiveWorkbook.Unprotect("trece");

Setarea și eliminarea unei parole pentru foaia activă a unui registru de lucru Excel se face folosind comenzile

Excel.ActiveSheet.protect("trece"); // Seteaza parola
Excel.ActiveSheet.Unprotect("trece"); // elimina parola

Unde pass este setata parola pentru a proteja cartea.

Operatii auxiliare in EXCEL

Ștergerea rândurilor cu o schimbare în sus (când se efectuează aceste acțiuni, rândurile de la 5 la 15 vor fi șterse):

Excel.Rânduri["5:15"].Selectați;
Excel.Selection.Delete;

Pentru a seta o zonă de înghețare pe foaia de lucru Excel activă:

// dezgheață zona dacă a fost setată
Excel.ActiveWindow.FreezePanes:=Fals;
// selectează celula dorită, în acest caz D3
Excel.Range["D3"].Selectați;
// setează zona să fie înghețată
Excel.ActiveWindow.FreezePanes:=Adevărat;