C# - Szóműveletek MS Word alkalmazásokban

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

forráskód letöltése
A sorozat korábbi számaiban megismerhettük a WScript objektum azon lehetőségét, melyekkel képes elérni egy tetszőleges COM komponenst, azt példányosítani, és metódusait meghívni. Cikkünkben felhasználjuk ezt a képességét arra, hogy kapcsolatot teremtsünk a számítógépre telepített MS Word alkalmazással, és egy dokumentum elemeivel a parancsállományból műveleteket végezzünk.
A sorozaton belül egy kisebb alfejezetet szánunk annak bemutatására, hogy miként, és főleg milyen műveleteket lehet elvégezni parancsállományainkkal külső alkalmazások állományain úgy, hogy elérjük őket interfészeiken keresztül.
A mellékelt programból indíthatjuk el a WSH08.wsf parancsállományt, melyben elhelyeztük a Word-műveletek kódját. A példaprogram mappájában elhelyeztünk egy sample.doc állományt, mely szöveget tartalmaz.
A parancsállomány segítségével kétfajta műveletet végzünk el a szövegen: az első művelettel megkereshetjük az alkalmazás szövegmezejében megadott szó valamennyi előfordulását, és stílusukat BOLD-ra változtatjuk. A másik műveletben megszámláljuk a megadott szó valamennyi előfordulását, és az eredményt egy infofile.txt nevű szöveges állományba mentjük ugyancsak a létrehozott /test mappába.
A program első TextBox kontroljában meg kell adnunk a számítógépünk egy létező meghajtójának betűjelét, a következő miatt: a program mappájában elhelyezett sample.doc állomány, amennyiben alkalmazásunkat a könyvtárfa egy mélyebb pontjáról futtatjuk, igen hosszú elérési úttal rendelkezik. Mivel a művelet végrehajtás paramétereit parancssori argumentumként adjuk át az állománynak, ez az elérési út csonkul.
Ennek érdekében a megadott gyökérmappában létrehozunk egy /test könyvtárat, átmásoljuk a dokumentumot, majd ezzel végezzük el a műveleteket.
Amennyiben a rádiógombok közül kiválasztottuk, hogy számlálni, vagy vastagítani kívánjuk az előforduló szavakat, akkor a MŰVELET gombbal futtatható a script a megadott értékekkel.
A parancsállomány első művelete, hogy beolvassuk a parancssori argumentumokat változókba:
ptype = new Number(args(0));
fword = args(1) + ' ';
A megadott szavakat egy SPACE karakterrel meg kell toldani, mert a Word-ben egy szó magában foglalja a következő szóközt is.
fdoc = args(2);
A negyedik argumentum lesz a létrehozandó szöveges állomány elérési útvonala:
newfile = args(3);
Majd példányosítjuk a Word komponenst:
wdApp = WScript.CreateObject("Word.Application");
Ezt követően létrehozunk egy Word dokumentum objektumot a megadott elérési útvonallal:
doc = wdApp.Documents.Open(fdoc);
Ha nulla volt a parancssori első argumentum, vagyis a vastagítást választottuk, akkor sorban végigmegyünk a dokumentum paragrafusain:
if (ptype == 0)
{
  for(i=1;i<doc.paragraphs.Count+1;i++)
  {
Minden paragrafus szavain:
    paragh = doc.paragraphs.Item(i);
    for(j=1;j<paragh.Range.Words.Count+1;j++)
    {
      wordrange = paragh.Range.Words.Item(j);
A szavakat pedig egyenként megvizsgáljuk, hogy megegyeznek-e a megadott szóval:
      if (wordrange == fword)
      {
        wordrange.Bold = true;
      }
    }
  }
}
Amennyiben a számlálást választottuk, kicsit egyszerűsödik a művelet, hiszen itt csak egy változó értékét kell növelni akkor, amikor egy szót találunk.
A művelet elején létrehozunk egy FileSystemObject objektumot, melynek segítségével a szöveges fájlba írunk:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var infoFile = fso.CreateTextFile(newfile+"infofile.txt", -1);
...
A szavak számlálása:
...
if (wordrange == fword)
{
  wordnum++;      
}
Az eredményről készül a naplóállomány:
infoFile.WriteLine("A vizsgált állomány: " + fdoc);
infoFile.WriteLine("A keresett szó: " + fword);
infoFile.WriteLine("Találatok száma: " + wordnum);
infoFile.Close();
A műveletek végén el kell mentenünk az állomány változásait, majd be kell zárnunk azt:
doc.Save();
doc.Close();

Windows Script Host lehetőségei cikksorozat