A Word alkalmazás eléréshez referenciaként megadtuk a szükséges COM komponenst. Most már csak használni kell annak osztályait.
A nyomógombra kattintva beolvassuk a projekt mappájában elhelyezett Nevek.doc állományban található táblázat adatait, majd megjelenítjük azokat a DataGrid kontrolban.
A táblázat olvasásakor első lépésként a fejléc mezők karakterláncaiban az ékezetes karaktereket kicseréljük. Ez azért szükséges, hogy a létrehozandó DataTable objektum oszlopainak neveként tudjuk megadni a fejlécszövegeket.
Ezt a műveletet a GetTitle metódusban végezzük el. A metódusban figyelnünk kell arra, hogy a beolvasott karakterláncok végéről levágjunk két karaktert. Ezek a karakterek nem szignifikáns értékek. Az osztályban megadtunk két karakterláncot, melyek egyike az ékezetes karaktereket tartalmazza, míg a másik a cserekor használható nem-ékezetes megfelelőit. A műveletben egyszerűen kicseréljük az ékezetes karaktert a másik karakterlánc azonos pozíciójában levő nem-ékezetesre.
pos = invalids.IndexOf(str[i]);
if (pos == -1)
{
title += str[i];
}
else
{
title += valids[pos];
}
Amikor a nyomógombra kattintunk, létrehozunk egy Word alkalmazás-példányt.
Word.Application wa = new Word.Application();
Az Open metódussal megnyitjuk a Nevek.doc Word dokumentumot, a metódus visszatérési értéke egy Word.Document objektum lesz.
Word.Document wd = wa.Documents.Open(ref file,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o);
A metódus első paramétere a fájl neve, a többi paraméter – mivel ebben az alkalmazásban nem használjuk őket – Missing.Value értékű.
A dokumentum első táblázata lesz a beolvasandó táblázat. A lekérdezés eredménye lesz a használandó Word.Table objektum.
Word.Table wt = wd.Tables.Item(1);
A táblázat első során – mely a fejléceket tartalmazza – végigmenve beolvassuk a mezők tartalmát, majd a kapott karakterláncokkal, mint oszlopnevekkel létrehozzuk a DataTable objektum DataColumn típusú oszlopait.
DataTable dt = new DataTable();
for(int i=1;i<=wt.Columns.Count;i++)
{
dt.Columns.Add(new DataColumn(GetTitle(wt.Cell(1,i).Range.Text),Type.GetType("System.String")));
}
Ezt követően beolvassuk a táblázat többi celláját is, majd elhelyezzük őket egy DataRow objektum celláiban.
DataRow dr;
for(int i=2;i<=wt.Rows.Count;i++)
{
dr = dt.NewRow();
for(int j=1;j<=wt.Columns.Count;j++)
{
dr[j-1] = wt.Cell(i,j).Range.Text.Substring(0,wt.Cell(i,j).Range.Text.Length-2);
}
dt.Rows.Add(dr);
}
A művelet végén bezárjuk a dokumentumot és a Word alkalmazást, majd megjelenítjük a DataGrid-ben a DataTable objektum tartalmát.
wd.Close(ref o,ref o,ref o);
wa.Quit(ref o,ref o,ref o);
dataGrid1.DataSource = dt.DefaultView;