Delphi - Táblázat készítés, formázás Word-ben

Office 6. rész

forráskód letöltése
Ebben a cikkben a táblázatok létrehozásával, formázásával foglalkozunk. Megnézzük, hogy miként tudunk létrehozni Delphi-s alkalmazásunkból egy olyan Word dokumentumot, melybe táblázatot is beszúrunk, majd azt egyedileg formázzuk. Új táblázatot a Tables.Add függvénnyel hozhatunk létre:
tbl:=WordApp.ActiveDocument.Tables.AddOld(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior);
  • Range: a kijelölés, ill. a táblázat helye.
  • NumRows: a táblázat sorainak száma.
  • NumColumns: a táblázat oszlopainak száma.
  • DefaultTableBehavior: értékei a következők lehetnek: wdWord8TableBehavior (AutoFit kikapcsolva) vagy wdWord9TableBehavior (AutoFit bekapcsolva). Az alapértelmezett érték: wdWord8TableBehavior.
  • AutoFitBehavior: WdAutoFitBehavior típusú paraméter, melynek a következő értékei lehetnek: wdAutoFitContent, wdAutoFitFixed, vagy wdAutoFitWindow. Ha a DefaultTableBehavior értéke wdWord8TableBehavior, akkor ez a paraméter figyelmen kívül marad!
A dokumentumban található táblázatokat az ActiveDocument.Tables osztályon keresztül érhetjük el. Egy táblázatot az ActiveDocument.Tables.Item(x) függvénnyel kaphatunk meg, ahol x a táblázat sorszáma a dokumentumban.
var
  tbl: Table;
…
tbl:=WordApp.ActiveDocument.Tables.Item(2);
A fenti példa a második számú táblázat lekérdezését mutatja be. A tbl változóban ezután tetszőleges műveleteket végezhetünk a táblázattal.

Ha már megvan a táblázatunk, akkor töltsük fel azt adatokkal, és formázzuk is meg egy kicsit. A cellákat nagyon egyszerűen elérhetjük, a Table osztály Cell függvényével, amely egy Cell osztályt ad vissza. Ebben a cella formázásához szükséges property-k és függvények találhatók. A következő módon adhatjuk meg a cella szövegét:
tbl.Cell(2, 3).Range.Text:='Continent';
A Range osztályon keresztül minden formázási lehetőséget megkapunk. Formázhatunk bekezdést (Range.Paragraphs), betűtípust (Range.Font), és még sok más tulajdonságot lekérdezhetünk és beállíthatunk.

Egy táblázatban sokszor előfordul, hogy cellákat kell összevonni. Ezt a következőképpen tehetjük meg:
tbl.Rows.Item(1).Cells.Merge;
Ezzel a sorral, az első sor celláit egyesítettük.
Gyakori formázás a táblázatoknál a keretezés. Az alábbi sorral a táblázat köré rajzolunk keretet, 2,25 pontos vonallal:
tbl.Borders.InsideLineStyle := wdLineStyleSingle;
tbl.Borders.OutsideLineWidth := wdLineWidth225pt;
Valamivel bonyolultabb egy kijelölt rész keretezése. Az alábbi példa a táblázat első sorát keretezi be, szintén 2,25 pontos vonallal.
tbl.Rows.Item(1).Borders.InsideLineStyle := wdLineStyleSingle;
tbl.Rows.Item(1).Borders.OutsideLineWidth := wdLineWidth225pt;
Megint másként kell eljárnunk, ha a cella, vagy cellák valamelyik oldalán lévő keretet szeretnénk csak megváltoztatni. Az alábbi példa a második sor celláit dupla vonallal húzza alá:
tbl.Rows.Item(2).Borders.Item(wdBorderBottom).LineStyle := wdLineStyleDouble;
A táblázatot bekereteztük, most már csak fel kell tölteni tartalommal. A táblázat első sora a címsor, ezért ezt egy kicsit másképpen formázzuk, mint a többi sort. Az (1,1) cellába beírjuk a címet, majd beállítjuk a betűformázást. A Paragraphs.Shading osztályon keresztül tudjuk a bekezdés hátterének színét, így a cella színét is beállítani. Ez az első sorban szürke lesz (clSilver).
  r:=tbl.Cell(1,1).Range;
  r.Text:='Countryes of America';
  r.Font.Name:='ARIAL';
  r.Font.Size:=16;
  r.Font.Bold:=integer(true);
  r.Font.Italic:=integer(true);
  r.Paragraphs.Shading.BackgroundPatternColor:=clSilver;
A második sorban az oszlopok feliratai találhatók, melyeket szintén megformázunk. A Rows osztály Items függvényével lekérdezzük a második sort az r változóba, majd a Select függvény meghívásával kijelöljük a teljes sort. Ezután az összes formázás a kijelölt cellákra lesz hatással.
  r:=tbl.Rows.Item(2);
  r.Select;
  r.Range.Font.Name:='arial';
  r.Range.Font.Size:=8;
  r.Range.Font.Bold:=integer(true);
  r.Range.Paragraphs.Alignment:=wdHorizontalLineAlignCenter;
A második sor celláiba beírjuk az oszlopok elnevezéseit.
  tbl.Cell(2, 1).Range.Text:='Country Name';
  tbl.Cell(2, 2).Range.Text:='Capital';
  tbl.Cell(2, 3).Range.Text:='Continent';
  tbl.Cell(2, 4).Range.Text:='Area';
  tbl.Cell(2, 5).Range.Text:='Population';
Egy ciklusban végigmegyünk az adatbázis rekordjain, és sorban beírjuk a rekordok mezőinek értékeit a megfelelő cellákba. A row változóban tároljuk táblázat aktuális sorának sorszámát. Ez a programrészlet a fentiekhez képest már nem tartalmaz újdonságot.
  with Query1 do begin
    First;
    row:=3;
    while not EOF do begin
      tbl.Cell(row, 4).Range.Paragraphs.Alignment:=wdHorizontalLineAlignRight;
      tbl.Cell(row, 5).Range.Paragraphs.Alignment:=wdHorizontalLineAlignRight;
      tbl.Cell(row, 1).Range.Font.Bold:=integer(true);
      tbl.Cell(row, 1).Range.Text:=Query1Name.Value;
      tbl.Cell(row, 2).Range.Text:=Query1Capital.Value;
      tbl.Cell(row, 3).Range.Text:=Query1Continent.Value;
      tbl.Cell(row, 4).Range.Text:=Query1Area.DisplayText;
      tbl.Cell(row, 5).Range.Text:=Query1Population.DisplayText;
      inc(row);
      Next;
    end;
  end;

Office cikksorozat