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.
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;