HyperLink


Bejelentkezés
E-mail: 
Jelszó: 






Skip Navigation Links
 

Adatok importálása többlapos Excel munkafüzetből


Példaprogram letöltése

10636 bájt

E példánkban egy olyan alkalmazást készítünk, mely egy Excel táblát használ arra, hogy konfigurációs adatait beolvassa és ennek megfelelően állítsa be a Form tulajdonságait, mint a méret, szín, kurzor. Az Excel tábla egy másik lapján tetszőleges számú domain nevet tárolunk, melyek szintén megjelenítésre kerülnek a Form-on.
A példából jól látható, hogy bármilyen adat is legyen az Excel táblában, azt Delphi-s alkalmazásunk könnyedén beolvashatja és tetszőleges módon felhasználhatja.

A mellékelt Munkafüzet1.xls-ben két munkalapon tárolunk adatokat. Az elsőre került a Form-unk néhány property-je és azok beállítandó értéke. A példánkban a property-ket név alapján fogjuk azonosítani, így az Excel táblába egyszerűen csak be kell írnunk új property-ket és hozzájuk egy értéket. A példaprogram ezt kiolvassa és az ott leírt property-nek értékül adja az Excel táblában szereplő értéket. Arra ügyeljünk, hogy a program jelenleg csak szám típusú property-knek tud értéket adni.
A Color property esetén készítettünk egy kis RGB számolót, így könnyebben megadható a szín egyetlen számként, mivel csak a piros, zöld és kék színösszetevő értékét kell megadnunk és az Excel ezekből kiszámolja azt a számot, melyet a Color property-nek kell értékül adni.
A második lapon az első oszlopban web helyek megnevezéseit soroltuk fel, míg mellettük a hozzájuk tartozó URL-t. Készítettünk az első sorban egy számlálót is, mely megmondja, hogy hány web helyet írtunk már be az Excel táblába.
Nézzük, most miként tudjuk felhasználni ezt az Excel táblát.
A programunk indulásakor elindít a háttérben egy Excel alkalmazást, majd a betölti a mellékelt Munkafüzet1.xls állományt.
procedure TForm1.FormCreate(Sender: TObject);
begin
  ExcelApp:=CreateOleObject('Excel.Application');
  if not VarIsNull(ExcelApp) then begin
    ExcelApp.Visible:=false;
    WorkBook:=ExcelApp.Workbooks.Open(ExtractFilePath(Application.ExeName)+'Munkafüzet1.xls');
Az Open függvény egy WorkBook objektumot ad vissza, mely tartalmazza az imént megnyitott XLS állományt. Ennek első munkalapját a WorkSheets property-n keresztül érhetjük el. Figyeljünk arra, hogy ez a tömb egytől kezdődik.
    WorkSheet:=WorkBook.WorkSheets[1];
Most már megvan az Excel tábla első munkalapja, melynek harmadik sorától kezdődik a Form property-jeinek felsorolása. Indítunk egy végtelen ciklust, melyet majd megszakítunk, ha olyan sorhoz érünk a munkalapon, ahol már nincs adat.
    i:=3;
    while true do begin
Mivel a property-knek a neve van megadva, melyeket sztringként érünk el, így szükségünk lesz egy olyan megoldásra, amely név alapján tud egy objektum adott property-jének értéket adni. Ehhez egy régebbi, alább hivatkozott cikkünk SetOrdProperty eljárását fogjuk alkalmazni. Itt első paraméterként az adott objektumot kell megadnunk, mely most a Form1 lesz. Másodikként jöhet a property neve, míg végül annak értéke. A property nevét a WorkSheet objektum Cells tömbjén keresztül érhetjük el. Ez egy kétdimenziós tömb, melynél az első index az Excel munkalap sorát jelenti, míg a második az oszlopát. A sorszámok itt is egytől indulnak.
      try
        SetOrdProperty(Form1, WorkSheet.Cells[i, 2], StrToInt(WorkSheet.Cells[i, 3]));
        inc(i);
      except
Ha egy olyan cellából próbálunk meg adatot olvasni, ahová nem írtunk semmit, akkor az StrToInt biztos, hogy hibát fog okozni. Ekkor egyszerűen megszakítjuk a whlie ciklust.
        break;
      end;
    end;
Nézzük most a második munkalapot.
    WorkSheet:=WorkBook.WorkSheets[2];
Itt egy for ciklust fogunk használni, mely megy a munkalap negyedik sorától az első sor második cellájában lévő darabszámig. Mivel a munkalapon számoltatjuk az Excellel a beírt sorokat, így ezt az értéket fel tudjuk használni a ciklushoz.
    for i:=4 to StrToInt(WorkSheet.Cells[1, 2])+4 do begin
Kiolvassuk lokális változókba a web helyek megnevezését és az URL-t.
      s1:=WorkSheet.Cells[i, 1];
      s2:=WorkSheet.Cells[i, 2];
Ezt követően létrehozunk egy TLabel komponenst, melynek úgy állítjuk be a property-jeit, hogy azok egymás alatt jelenjenek meg a Form-on. A TLabel felirata lesz a megadott web hely neve, míg a Hint property-be az URL-t tároljuk. Az OnClick eseményhez hozzárendeljük a DoClick függvényünket, így amikor a felhasználó rákattint valamely TLabel-re, akkor lehetőségünk van az adott web hely megnyitására.
      with TLabel.Create(Self) do begin
        Top:=(i-3)*16;
        Left:=10;
        Caption:=s1;
        Hint:=s2;
        Cursor:=crHandPoint;
        OnClick:=DoClick;
        Parent:=Self;
      end;
    end;
Végül zárjuk a munkafüzetet mentés nélkül és bezárjuk az Excel-t is.
    WorkBook.Close(false);
    ExcelApp.Quit;
  end;
end;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 422. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2010 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |