C# - Word táblázat adatainak megjelenítése DataGrid kontrolban

forráskód letöltése
A modern alkalmazások esetén egyre nagyobb követelmény, hogy képesek legyenek együttműködni más alkalmazásokkal, például a legnépszerűbb irodai szoftverekkel. Például legyen képes adatokat importálni a szövegszerkesztőből, vagy a táblázatkezelőből. Cikkünkben arra mutatunk egy példát, hogy miként tudjuk elérni a megadott Word dokumentum táblázatos formában rögzített információit, és miként tudjuk azokat egy DataGrid kontrolban megjeleníteni.
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;