Rapidă prelucrare a datelor Excel în Delphi

De optsprezece luni am fost oferit o grămadă de opțiuni cu privire la modul de a accelera citirea datelor dintr-o foaie de lucru Excel - utilizarea bibliotecilor MSXML și a altor proceduri gata pentru tine și funcții. Ei bine, orice problemă poate fi rezolvată în mai multe moduri. Luați în considerare mai multe opțiuni și stabiliți care dintre opțiunile vor fi cele mai rapide. Ei bine, care opțiune va fi mai convenabilă - este deja toată lumea va decide pentru sine.







Citirea datelor din Excel

Mai întâi, luați în considerare opțiunea de citire a datelor prin care păcătoșii sunt cei care încep doar să se familiarizeze cu Excel în Delphi - citirea datelor din fiecare celulă separat. Procedura de testare cu această opțiune de citire ar putea arăta astfel:

Contorul va conține, în cele din urmă, timpul de citire și de ieșire din datele StringGrid. Ar fi posibil să faci contorul exclusiv pentru citirea datelor dintr-o foaie, dar am decis să nu supraîncărc codul sursă cu variabile inutile. Dacă există o dorință - puteți să rescrieți un pic din codul sursă și să obțineți un timp de citire "curat".

Pentru a testa această opțiune, a fost creată o foaie Excel care conține 143 de rânduri și 142 de coloane cu date, adică 20306 celule cu date. Figura de mai jos arată valoarea contorului după citirea datelor:

12 secunde pentru a citi. dar dacă există 1000 de rânduri și 1000 de coloane? Deci nu puteți aștepta sfârșitul operației.

Dacă te uiți atent la procedura prezentată mai sus, putem vedea că de fiecare dată când ciclu la începutul fiecărei iterații obținem gama ocupată de date, atunci acest interval devine o anumită celulă și apoi citiți valoarea în celulă. De fapt, multe operațiuni inutile pentru citirea datelor dintr-o foaie nu sunt necesare. Mai ales când datele sunt situate într-o matrice continuă. O opțiune de citire mai avantajoasă în acest caz este citirea datelor direct dintr-o gamă întreagă într-o matrice.







În practică, implementarea acestei versiuni a lucrării va fi chiar mai ușoară decât cea prezentată mai sus. Vezi pentru tine. Iată o opțiune de citire a datelor într-o întreagă gamă:

Ne uităm la momentul operațiunii:

După cum puteți vedea, creșterea vitezei sa dovedit a fi enormă, chiar dacă timpul de actualizare a StringGrid a fost inclus în contor.

Aici ar fi indicat să se arate metoda inversă de lucru cu Excel, adică scrieți date într-o foaie de lucru Excel folosind o matrice variantă.

Scrierea datelor în Excel

În cazul în care trebuie să scriem o cantitate mare de date pe o foaie Excel, trebuie să efectuăm o operație inversă, adică mai întâi creați o matrice variantă, apoi scrieți datele la această matrice și apoi scrieți întreaga matrice cu o singură operație în Excel. De exemplu, am scris o procedură care citește o cantitate mare de date dintr-un StringGrid și scrie aceste date în foaia a doua a unui registru de lucru deschis din Excel:

Aici, vom crea mai întâi o matrice variantă bidimensional folosind metoda VarArrayCreate, și apoi completați în matrice de date și să treacă matrice în Excel. Rețineți că atunci când scrieți în Excel nu sunt folosite cicluri - înregistrarea are loc în 2 pași simpli:

  • selectați intervalul utilizând prima și ultima celulă
  • atribuiți o valoare domeniului din matrice.

Pentru a completa imaginea de mai jos, figura arată valoarea contorului, care a numărat timpul din momentul creării matricei pentru activarea aplicației Excel inclusiv:

Firește, cu creșterea cantității de date, timpul operației va crește, de asemenea. De exemplu, o foaie care conține 1000 de rânduri și 256 de coloane cu date a fost umplută aproximativ 7 secunde. Dacă aveți un astfel de timp este inacceptabil, atunci procedura de mai sus poate fi ușor accelerată cu ajutorul unei perechi VarArrayLock () și VarArrayUnlock (), dar trebuie amintit că matricea FData vor fi transpuse.

Ce altceva ar trebui să spun despre citirea / scrierea datelor în Excel? Probabil faptul că metodele de lucru de mai sus necesită în mod necesar programul Excel instalat pe computerul în care rulează programul. În legătură cu această circumstanță, este posibil să aveți nevoie de un mod mai universal de lucru cu Excel. Aici, din nou, pot exista mai multe opțiuni de lucru, dar voi arăta sau mai degrabă ar indica doar unul dintre ele - folosind biblioteca XLSReadWrite.

Un exemplu simplificat pentru Delphi 7

Un exemplu complet de colaborare cu biblioteca:







Articole similare

Trimiteți-le prietenilor: