C# - Oldalszámozás, tartalomjegyzék készítése Word-ben

Word programozása 5. rész

forráskód letöltése
Gyakran használt lehetőség a Word-ben az oldalszámozás és a tartalomjegyzék használata. Mostani cikkünkben azt nézzük meg, hogy hogyan tudjuk ezeket a lehetőségeket C#-ból alkalmazni. Mivel a tartalomjegyzékhez oldalszámozás sem árt, így annak is utánanézünk, hogy miként számozhatjuk oldalainkat programból.
Nagyobb dokumentumokban történő eligazodás érdekében elengedhetetlen az oldalszámozás és a tartalomjegyzék használata. Ennek kipróbálásához generáljunk egy több oldalas dokumentumot, melyben címsorokat is kell használnunk hiszen a tartalomjegyzék ez alapján készül majd.
A szokásos módon létrehozunk egy kapcsolatot a Word-el, majd egy új dokumentumot nyitunk.
      Word.Application wa = new Word.Application();    
      wa.Visible = true;      
      wa.Documents.Add(ref m, ref m, ref m, ref m);      
Egy ciklus segítségével dátumokat írunk be a dokumentumba úgy, hogy a hónapot növeljük egyesével minden egyes futásakor a ciklusmagnak. Egyes címsort használunk az aktuális év jelölésére. A tartalomjegyzék is majd ez alapján készül. A Címsor 1 használatához tudnunk kellene, hogy milyen nyelvű a Word, mivel nem mindegy, hogy Címsor 1, vagy Heading 1 megnevezést használjuk. Ha nem biztos, hogy milyen nyelvű a Word azokon a helyeken, ahol a programunk futni fog, legjobb ha mind a két esetre felkészítjük alkalmazásunkat.
      for (int i=0; i<100; i++)
      {
        DateTime dt = DateTime.Now.AddMonths(i);
        if (dt.Year!=year)
        {
          year=dt.Year;
          try
          {
            o="Heading 1";
            ws.set_Style(ref o);
            ws.TypeText(year.ToString());
          }
          catch
          {
            o="Címsor 1";
            ws.set_Style(ref o);
            ws.TypeText(year.ToString());
          }
          ws.TypeParagraph();
        }
        ws.TypeText("Dátum: "+dt.ToString("yyyy. MMMM. dd."));
        ws.TypeParagraph();
      }
Oldalszámozás készítése
Azt oldalszámozáshoz először is meg kell határoznunk, hogy melyik szakaszt szeretnénk oldalszámokkal ellátni, mivel egy Word dokumentum több szakaszból is állhat. Mostani példánkban olyan Word dokumentumot generáltattunk, melyben csak egy szakasz van, így majd az első szakaszhoz készítjük el a számozást. Ehhez a Sections osztályt hívjuk segítségül: itt három lehetőségünk is van egy adott szakasz kiválasztására.
  • First: az első szakaszt adja vissza
  • Last: a második szakaszt adja vissza
  • Item: egy tetszőleges sorszámú szakaszt ad vissza
      Word.Section wsec = wa.ActiveDocument.Sections.First;
Ha megvan a szakasz, akkor eldönthetjük, hogy a lap tetején (Header), vagy a lap alján (Footer) kívánjuk elhelyezni az oldalszámot (esetleg mindkét helyen).
Az Add függvény két paramétert vár:
  • PageNumberAlignment: WdPageNumberAlignment típusú konstans paraméter, amely meghatározza az oldalszám igazítását. Lehetséges értékei: wdAlignPageNumberCenter, wdAlignPageNumberInside, wdAlignPageNumberLeft, wdAlignPageNumberOutside, vagy wdAlignPageNumberRight.
  • FirstPage: logikai érték, ami azt határozza meg, hogy az első oldalon is legyen-e oldalszám.
      object pna = Word.WdPageNumberAlignment.wdAlignPageNumberRight;
      object b = true;
      wsec.Footers.Item(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).PageNumbers.Add(ref pna, ref b);
Tartalomjegyzék készítése
Oldalszámunk már van, jöhet tehát a tartalomjegyzék. Ehhez az ActiveDocument.TablesOfContents osztály Add függvényét kell felhasználnunk.
WordApp.ActiveDocument.TablesOfContents.Add(Range, UseHeadingStyles, UpperHeadingLevel, LowerHeadingLevel, UseFields, TableID, RightAlignPageNumbers, IncludePageNumbers, AddedStyles, UseHyperlinks, HidePageNumbersInWeb);
  • Range: kijelölés, ahová a tartalomjegyzéket be kell szúrni.
  • UseHeadingStyles: fejléc stílusok használata a tartalomjegyzék létrehozásához. Alapértelmezett értéke true.
  • UpperHeadingLevel: a legmagasabb értékű fejléc stílus sorszáma. Alapértelmezett értéke 1 ("Címsor 1").
  • LowerHeadingLevel: a legalacsonyabb értékű fejléc stílus sorszáma. Alapértelmezett értéke 1 ("Címsor 3").
  • UseFields: TJ mezők használata a tartalomjegyzék létrehozásához.
  • TableID: a tábla 1 karakteres azonosítója.
  • RightAlignPageNumbers: True érték esetén az oldalszámok jobbra lesznek igazítva.
  • IncludePageNumbers: a tartalomjegyzékben megjelennek az oldalszámok is.
  • AddedStyles: a tartalomjegyzék stílusai egy sztringben felsorolásszerűen (pl. "Címsor 1, Címsor 2, Címsor 3").
  • Ez a függvény az előzőtől mindössze két paraméterben tér el:
  • UseHyperlinks: True érték esetén a tartalomjegyzék elemei hivatkozásként is működnek. Web-re való publikáláshoz használható.
  • HidePageNumbersInWeb: True érték esetén elrejti az oldalszámokat a Web-re való publikáláskor.
      object start=0;
      object end=0;
      Word.Range wr = wa.ActiveDocument.Range(ref start, ref end);      
      object UseHeadingStyles=true;
      object UpperHeadingLevel=1;
      object LowerHeadingLevel=1;
      object UseFields=true;      
      object RightAlignPageNumbers=true;
      object IncludePageNumbers=true;
      object AddedStyles="Címsor 1";
      wa.ActiveDocument.TablesOfContents.Add(
        wr,
        ref UseHeadingStyles,
        ref UpperHeadingLevel,
        ref LowerHeadingLevel,
        ref UseFields,
        ref m,
        ref RightAlignPageNumbers,
        ref IncludePageNumbers,
        ref AddedStyles,
        ref m,
        ref m,
        ref m
      );
A tartalomjegyzék formátumát is meghatározhatjuk a TablesOfContents.Format property használatával:
      wa.ActiveDocument.TablesOfContents.Format = Word.WdTocFormat.wdTOCFancy; 
A Format property értéke a következő konstansok egyike lehet: wdTOCClassic, wdTOCDistinctive, wdTOCFancy, wdTOCFormal, wdTOCModern, wdTOCSimple vagy wdTOCTemplate.
Mozgás a dokumentumon belül
Szintén a Selection osztályt kell használnunk, ezen belül is elsősorban a Goto-val kezdődő metódusokat. A Goto egy meghatározott objektumra ugrik, GotoNext a következő objektumra, míg a GotoWhat az előzőre. Azt, hogy mi az objektum konstansokkal lehet meghatározni (What paraméter).
wa.Selection.Goto(What, Which, Count, Name);
wa.Selection.GotoNext(What);
wa.Selection.GotoPrevious(What);
  • What: WdGoToItem típusú konstans érték: wdGoToBookmark, wdGoToComment, wdGoToEndnote, wdGoToEquation, wdGoToField, wdGoToFootnote, wdGoToGrammaticalError, wdGoToGraphic, wdGoToHeading, wdGoToLine, wdGoToObject, wdGoToPage, wdGoToPercent, wdGoToProofreadingError, wdGoToSection, wdGoToSpellingError, és wdGoToTable használható.
  • Which: WdGoToDirection konstans, ami a mozgás jellegét adja meg: wdGoToAbsolute, wdGoToFirst, wdGoToLast, wdGoToNext, wdGoToPrevious, vagy wdGoToRelative.
  • Count: ennyi egységgel mozog.
  • Name: wdGoToBookmark, wdGoToComment, wdGoToField, és wdGoToObject konstansok esetében használható paraméter.
Példánkban a tartalom generálása után az első sorra ugrunk, hogy rögtön látható legyen a tartalomjegyzék is.
      object what = Word.WdGoToItem.wdGoToLine;
      object which = Word.WdGoToDirection.wdGoToFirst;
      ws.GoTo(ref what, ref which, ref m, ref m);

Word programozása cikksorozat