C# - Műveletek Word táblázatokkal

Windows Script Host lehetőségei 9. rész

forráskód letöltése
Ebben a cikkünkben még inkább elmélyedünk abban a témakörben, melyet elkezdtünk körbejárni a sorozat ezt megelőző számában. Mostani példáinkban a Word dokumentumokban létrehozható táblázatok témakörében mélyedünk el részletesen, bemutatva, hogy miként generálhatunk automatikusan formázott táblázatokat, illetve hogyan mozgathatjuk ezeket dokumentumaink között.
A példaprogramunkkal három műveletet tudunk elvégezni, ebből kettő a táblázatokkal kapcsolatos, a harmadik pedig kicsit még visszanyúlik a sorozat ezt megelőző számának témakörébe. Elsőként ez utóbbi példát mutatjuk be:
Szöveges állomány konvertálása
Ebben egy szöveges állomány tartalmát konvertáljuk Word dokumentummá. A szöveges állomány - PlainText.txt -, megtalálható a példa mappájában. A Form TabControl-jának SZÖVEG füle alatt érhetjük el ezt a funkciót. A műveletek indítása előtt meg kell adni egy meghajtót, melyet a parancsállományunk használni fog. A script korlátozott képességei miatt a parancssori argumentumok hosszát redukálandó a példaállományokat a meghajtó gyökerében létrehozott TEST mappába másoljuk, majd a generált állományokat is ide helyezzük el.
A program mappájában megtalálható Wsh09.wsf állomány tartalmazza a műveleteket elvégző kódsorokat. A három feladathoz tartozó kódokat három egységben – JOB – helyezzük el, a szövegkonvertálás műveletét a CONVERT azonosítóval rendelkező egységben megadott kód hajtja végre.
A parancsállomány ekkor két argumentumot fogad: az első tartalmazza a PlainText.txt állomány elérési útvonalát, a második a generálandó állomány elérési útvonalát.
Ezeket eltároljuk egy-egy változóban:
textFileName = args(0);  
newDocName = args(1);
A Word egy példányának létrehozása a következő lépés.
var wordApp = WScript.CreateObject("Word.Application");
A korábbi gyakorlattal ellentétben itt most nem megnyitunk egy állományt, hanem létrehozunk egy újat, így az Application osztály Document tagjának Add metódusát hívjuk meg.
var newDoc = wordApp.Documents.Add();
A dokumentum betűtípusát Arial-ra választjuk, hogy mutatósabb legyen. Ehhez a Content tag property-jeit kell elérni.
newDoc.Content.Font.Name = "Arial";
A szöveges állomány feldolgozásához egy FileSystemObject típusú objektumra is szükségünk van.
var fso = new ActiveXObject("Scripting.FileSystemObject");
Megnyitjuk a PlainText.txt állományt, majd soronként beolvassuk addig, amíg a fájl véget nem ér.
var f = fso.OpenTextFile(textFileName, 1);
var line = f.ReadLine();
var i = 0;
while (line != "")
{
  newDoc.Content.InsertAfter(line);
A feldolgozás során a szöveges állomány első, címként funkcionáló sorát kiemeljük úgy, hogy az azt követő részeket egy külön paragrafusban helyezzük el.
  if (i == 0)
  {
    newDoc.Content.InsertParagraphAfter();
  }  
  i++;
  line = f.ReadLine();
}
Valamint meg is vastagítjuk a szavakat.
newDoc.Sentences.Item(1).Bold = 1;
A dokumentum mentését a megadott néven végezzük el a Document objektum SaveAs metódusának meghívásával, a nevet paraméterként átadva.
newDoc.SaveAs(newDocName);
newDoc.Close();
Táblázat létrehozása
A parancsállomány MAKETABLE nevű egységében található a táblázat generálásának kódja. A parancsállomány ekkor egy paramétert vár, méghozzá a létrehozandó állomány helyéül szolgáló mappa elérési útvonalát.
A Form TÁBLA füle alatt ki kell választani a létrehozás funkcióját, majd a MŰVELET gombra kattintva elvégezhető a generálás.
A művelet elvégzése itt is a szükséges objektumok létrehozásával indul, majd a tábla létrehozásával folytatódik. A tábla egy automatikusan formázott táblázat lesz, mely a Word beépített stílusainak egyikét használja.
var newTable = newDoc.Tables.Add(newDoc.Range(0,0),4,3);
A táblázat három oszlopot és négy rekordot tartalmaz. A cellákon végighaladva elhelyezünk mindben egy-egy szöveget.
for(j=1;j<newTable.Range.Cells.Count+1;j++)
{
  var c = newTable.Range.Cells.Item(j);
  if (j == 1 || j == 2 || j == 3)
  {
    c.Range.InsertAfter("Tábla fejléc "+ j); 
  }
  else
  {
    c.Range.InsertAfter("Tábla cella "+ j);
  }
}
A formázáshoz a Table osztály AutoFormat metódusát kell meghívnunk, melynek első paramétere egy konstans, mely a stílust tartalmazza. Ez jelen esetben 30. A többi paraméterben arról rendelkezhetünk, hogy a stílus egyes elemeinek használatát engedélyezzük, vagy letiltjuk.
Végül elmentjük a dokumentumot:
newDoc.SaveAs(folder+"NewCreatedTable.doc");
Tábla másolása
A harmadik műveletben az ExistTable.doc állományban található 2 darab táblázatot másoljuk át egy új állományba, melynek neve NewTable.doc lesz, és a /test mappába kerül majd. A parancsállomány COPYTABLE egysége végzi el.
Az objektumok létrehozása után megnyitjuk a létező dokumentumot:
var existDoc = wordApp.Documents.Open(existFileName);
A létrehozunk egy új dokumentumot.
var newDoc = wordApp.Documents.Add();
Egy Range objektum reprezentálja az új dokumentum területét.
var newDocRange = newDoc.Range(0,0);
A táblázatot tartalmazó dokumentumban sorban kimásoljuk a táblákat a Vágólapra, majd beillesztjük őket az új állományba, természetesen mindegyiket egy új paragrafusba.
for(i=1;i<existDoc.Tables.Count+1;i++)
{
  table = existDoc.Tables.Item(i);
  table.Range.Copy();
  newDocRange.Paste();
  newDocRange.Collapse(0);
  newDocRange.InsertParagraphAfter();
  newDocRange.Collapse(0);
}
Majd mentés és a dokumentumok bezárása következik.
newDoc.SaveAs(folder+"NewTable.doc");
newDoc.Close();
existDoc.Close();
A táblázatok közül az egyik egy hagyományos, míg a másik egy formázott tábla, melyek megőrzik valamennyi jellemzőjüket.

Windows Script Host lehetőségei cikksorozat