A mellékelt példaprogramban 4 funkciót mutatunk be. A négy funkció az alkalmazás űrlapjának négy szegmensében található kontrolok segítségével próbálható ki.
Ugrás egy tetszőleges bekezdésre
A Form első szegmensében arra mutatunk példát, hogy hogyan lehet az aktív dokumentum megadott bekezdésére navigálni a kurzort. Ehhez a nyomógombbal megnyitjuk a több paragrafust tartalmazó sample01.doc dokumentumot.
object file = Application.StartupPath + "\\sample01.doc";
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,ref o,ref o,ref o);
A következő lépés, hogy a ComboBox kontrolban kiválasztott bekezdésre ugrunk. Ehhez az aktív dokumentum Paragraphs gyűjteményre van szükség. A Paragraphs kollekció Item metódusának kell átadni a célparagrafus számát, mely egy egytől induló sorszám.
wp = wa.ActiveDocument.Paragraphs.Item(comboBox1.SelectedIndex+1);
Az Item metódus visszatérési értéke egy Word.Range objektum, melynek Select metódusával ki is jelölhető az adott bekezdés.
Navigálás a bekezdés alapegységei között
A bekezdések különböző egységekből állnak. Ezek lehetnek karakterek, szavak, vagy sorok. Minden bekezdésben kijelölhető a tetszőleges alapegység, csupán specifikálni kell azt a megfelelő metódusban.
A Form második szegmensében meg kell nyitnunk a sample02.doc dokumentumot, majd a ComboBox kontrolban ki kell választanunk a megfelelő egységet, és a két másik nyomógombbal haladni a paragrafusban egységenként. Az adott egység ki is jelölődik, hogy látszódjon éppen hol tartunk.
Amikor a ComboBox kontrolban kiválasztottunk egy egységet, akkor azt kijelöljük. Ezt a következőképpen tesszük: elsőként a dokumentum első paragrafusára állunk, majd a Range objektum segítségével megadjuk az első egységet. A Range objektum rendelkezik egy Words, Characters és egy Lines kollekcióval. Az Item metódusokkal a meghatározott egységre lehet ugrani.
wp = wa.ActiveDocument.Paragraphs.Item(1);
switch(comboBox2.SelectedIndex)
{
case 0: wp.Range.Characters.Item(1).Select();
break;
...
A Word alkalmazás-objektum aktív dokumentuma rendelkezik egy ActiveWindow property-vel, melynek Selection property-je megadja, hogy mi a dokumentum kijelölt szakasza.
Word.Selection s = wa.ActiveDocument.ActiveWindow.Selection;
Ha ez megvan, akkor MakeStep metódusunkkal lépünk egyet a megadott egységenként előre.
A léptetés a Word.Selection objektum Next és Previous metódusával történik előre, vagy hátra. A megadott egységet a Word.WdUnits felsorolt típussal jelöljük ki. A számunkra fontos konstansok a következők:
- wdCharacter: karakterenként
- wdWord: szavanként
- wdLine: soronként
A Next, illetve Previous metódusoknak első paraméterként az egységet jelölő objektumot kell megadni, míg második paraméterében kell specifikálni, hogy éppen hány egységet kell lépni. Ez most egy.
switch(comboBox2.SelectedIndex)
{
case 0: unit = Word.WdUnits.wdCharacter;
break;
...
}
wr = s.Next(ref unit,ref count);
A metódushívások visszatérési értéke is egy Range objektum, melynek segítségével az aktuális egységet kijelölhetjük.
Mentés beágyazott betűtípusokkal
Amikor létrehozunk programból egy Word dokumentumot, és menteni szeretnénk, akkor a SaveAs metódust használhatjuk.
Amennyiben a metódusban csak a létrehozandó állomány nevét adjuk meg, akkor a létrejövő dokumentum nem tartalmazza a TrueType betűtípusokat beágyazva.
Ha az állományt ezek beágyazásával szeretnénk létrehozni, akkor a SaveAs metódust más paraméterlistával kell meghívni. A nyolcadik paramétert kell megváltoztatni a Missing.Value értékről logikai igaz értékre.
object embed = true;
wd.SaveAs(ref file,ref o,ref o,ref o,ref o,ref o,ref o,ref embed,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o);
A példában létrejövő sample03.doc állomány már tartalmazz ezt a betűtípust beágyazva. Erről meggyőződhetünk, ha az Eszközök menüből kiválasztjuk a Beállítások pontot, és a megjelenő ablakban a Mentés fülre kattintunk.
Üres sorok törlése
A dokumentum paragrafusai közt lehetnek nem kívánatos üres sorok, melyek szükségtelenül foglalják a helyet. Ezeket a paragrafusokat ki lehet törölni akkor is, ha több van belőlük egymás után.
Azonban nem elegendő egy ciklussal végigmenni a dokumentum paragrafusain, és az üres sorokra meghívni a Delete metódust, mert ekkor a paragrafusszám csökken, és a ciklus változója nem a megfelelő értékre fog állni.
Ezt kiküszöbölendő, egy vaskosabb paragrafusszámot alapul vevő ciklust indítunk. A ciklus addig megy, amíg az i ciklusváltozó értéke el nem éri a 10000-et.
A ciklus elején az i. paragrafusra ugrunk. Amennyiben a paragrafus nem tartalmaz szöveget és képet sem, akkor töröljük úgy, hogy a ciklusváltozó értékét csökkentjük egyel, így biztosítva, hogy a következő bekezdés is legyen megvizsgálva.
wp = wd.Paragraphs.Item(i);
if (wp.Range.Text.Trim() == "" && wp.Range.InlineShapes.Count == 0)
{
wp.Range.Delete(ref o,ref o);
i--;
}
Ha a bekezdés tartalmaz szöveget, vagy képet akkor növelhető a ciklusváltozó.
A sample04.doc állományból ennek segítségével kitörölhető valamennyi üres sor.