Delphi - Word táblázatok megjelenítése gyorsan

forráskód letöltése
Készítünk egy komponenst, amely segítségével egy megadott Word állományban található bármely táblázatot megjeleníthetünk. A táblázat tartalma egy StringGrid komponensben jelenik meg. Nekünk mindössze annyi a dolgunk, hogy megadjuk a Word állomány elérési útját és nevét, valamint a dokumentumban található táblázat indexét.
A mellékelt példaprogram megnyitása előtt a WordTableSG.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A mellékelt példaprogram csak szabályos táblázatok esetén használható, amelyek nem tartalmaznak összevont cellákat.
A komponens A TStringGrid osztályból származik, így rendelkezik annak összes tulajdonságával.
A FileName property-ben adhatjuk meg a megnyitandó állomány nevét. Az adott állományon belül, a megjelenítendő táblázat indexét a TableIndex property segítségével állíthatjuk be. Ügyelnünk kell arra, hogy az első táblázat indexe nem 0, hanem 1.
Ezután már csak a Load metódust kell meghívnunk, és a komponens megjeleníti a táblázat tartalmát.
A komponens elkészítése
A Word programot a háttérben nyitjuk meg, OleVariant típusú változók segítségével, majd betöltjük a megadott állományt.
WordApp:=CreateOleObject('Word.Application');
WordApp.Documents.Open(FFileName);
Word-ben a táblázatok indexelése 1-el kezdődik. A megadott indexű táblázatot az alábbi módon érhetjük el.
Table:=WordApp.ActiveDocument.Tables.Item(FTableIndex);
A StringGrid-ben megjelenítendő sorok és oszlopok számát a Table objektumból határozzuk meg.
ColCount:=Table.Columns.Count;
RowCount:=Table.Rows.Count;
A Word táblázat egy cellájának tartalmát a Cell property-n keresztül érhetjük el. A cellák indexelésénél, a koordinátában először a sor és utána az oszlop szerepel. A sorok és oszlopok indexelése szintén 1-el kezdődik.
s:=Table.Cell(i,j).Range.FormattedText;
A beolvasott cellaértékben sortörések is szerepelhetnek, valamint az utolsó karakter mindig a „•”. Ezeket a StringReplace függvény segítségével eltávolítjuk.
A StringGrid oszlopainak szélességét a Word táblázatban szereplő oszlopok szélességének megfelelően állítjuk be.
for i:=0 to ColCount-1 do
  ColWidths[i]:=Table.Cell(1,i).Width;