Delphi - MS Word programozása Delphi-ből

Office 2. rész

forráskód letöltése
Az előző héten megkezdtük a Microsoft Office alkalmazások programozása című cikksorozatot, amelyet most folytatunk. Ebből a cikkből megtudhatjuk, hogy miként hozhatunk létre egy új, vagy nyithatunk meg egy már létező dokumentumot, hogyan menthetjük azt el, hogyan állíthatjuk be a lap paramétereit, továbbá hogyan jeleníthetjük meg a nyomtatási képet és nyomtathatjuk ki a dokumentumot. Szó lesz még arról, hogy hogyan írhatunk szöveget a megnyitott dokumentumba és hogyan tudunk egy dokumentumon belül mozogni. Új dokumentum létrehozása
A Word-ben új dokumentumot az Add függvénnyel tudunk létrehozni és megnyitni.
WordApp.Documents.Add(Template, NewTemplate, DocumentType, Visible);
Lehetséges paraméterek:
Template: opcionálisan megadható paraméter, amely az új dokumentum sablonjának a neve. Ha nem adjuk meg (EmptyParam), akkor a Normal dokumentumsablont fogja használni.
NewTemplate: szintén opcionálisan használható paraméter, amely True érték esetén az új dokumentumot sablonként nyitja meg, alapértelmezett értéke False.
DocumentType: wdNewDocumentType típusú paraméter, amelynek a következő értékei lehetnek: wdNewBlankDocument ha üres dokumentumot szeretnénk létrehozni, wdNewEmailMessage ha Email-t akarunk létrehozni, wdNewFrameset ha egy web lapot szeretnénk hasábokkal, vagy wdNewWebPage egy egyszerű weblap létrehozásához. Az alapértelmezett érték wdNewBlankDocument.
Visible: meghatározza, hogy az új dokumentum ablak látható legyen-e vagy sem. Alapértelmezett értéke True.


Meglévő dokumentum megnyitása
Egy már létező dokumentum megnyitásához az Open függvényt kell használnunk. Ez a függvény meglehetősen sok paraméterrel rendelkezik, melyekből általában csak néhányat használunk.
WordApp.Documents.OpenOld(FileName, ConfirmConversions, ReadOnly, 
   AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, 
   WritePasswordDocument, WritePasswordTemplate, Format, 
   Encoding, Visible);
  • FileName: fájlnév az elérési útvonallal.
  • ConfirmConversions: True értéke esetén megjeleníti a Fájl konvertálása ablakot, ha a fájl nem Word dokumentum.
  • ReadOnly: True esetén a dokumentum csak olvasható módban lesz megnyitva.
  • AddToRecentFile: True érték esetén a fájlnév bekerül az utoljára használt fájlok listájába a Fájl menübe.
  • PasswordDocument: a dokumentum megnyitásához szükséges jelszó.
  • PasswordTemplate: a sablon megnyitásához szükséges jelszó.
  • Revert: ha a fájl már meg van nyitva, akkor True esetén újra betölti a fájlt, és a nem mentett változtatások elvesznek. False esetén aktiválja azt a dokumentum ablakot, amelyben a fájl van.
  • WritePasswordDocument: a fájl mentéséhez szükséges jelszó.
  • WritePasswordTemplate: a sablon mentéséhez szükséges jelszó.
  • Format: WdOpenFormat típusú paraméter, amely a fájl formátumát határozza meg. Értékei a következők lehetnek: wdOpenFormatAllWord, wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatEncodedText, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText, vagy wdOpenFormatWebPages. Az alapértelmezett érték wdOpenFormatAuto.
  • Encoding: a dokumentumban használt kódlap azonosítója.
  • Visible: a megnyitott dokumentum ablaka látható-e, vagy sem. Alapértelmezett értéke true.



Dokumentum mentése
Az aktív dokumentum mentéséhez két metódus áll a rendelkezésünkre. Az egyik a Save, a másik pedig a SaveAs. Mindkettőt a Document osztályon keresztül használhatjuk.
WordApp.ActiveDocument.Save(NoPrompt, OriginalFormat)
  • NoPrompt: True érték esetén a Word elment minden dokumentumot. False érték esetén minden olyan dokumentumnál kérdést tesz fel, amelynél az utolsó mentés óta változtatások történtek.
  • OriginalFormat: WdOriginalFormat típusú paraméter, melynek a következő értékei lehetnek: wdOriginalDocumentFormat, wdPromptUser, vagy wdWordDocument.


A SaveAs metódusnak "valamivel" több paramétere van:
WordApp.ActiveDocument.SaveAs(FileName, FileFormat, LockComments, 
   Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, 
   EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, 
   SaveAsAOCELetter)
  • FileName: a fájl neve.
  • FileFormat: a fájl formátuma, amelyet a WdSaveFormat típusú paraméterrel lehet megadni. Értékei a következők lehetnek: wdFormatDocument, wdFormatDOSText, wdFormatDOSTextLineBreaks, wdFormatEncodedText, wdFormatHTML, wdFormatRTF, wdFormatTemplate, wdFormatText, wdFormatTextLineBreaks, vagy wdFormatUnicodeText.
  • LockComments: logikai érték.
  • Password: a fájl megnyitásához szükséges jelszó.
  • AddToRecentFiles: True érték esetén a fáj neve bekerül a legutóbb használt fájlok listájába a Fájl menübe.
  • WritePassword: a dokumentum mentéséhez szükséges jelszó.
  • ReadOnlyRecommended: True érték esetén a Word mindig felajánlja, hogy megnyitáskor csak olvasható módban legyen a dokumentum megnyitva.
  • EmbedTrueTypeFonts: True esetén a TrueType font-okat is elmenti a dokumentummal.
  • SaveNativePictureFormat: Ha a dokumentumban van olyan grafika, amely egy más platformról lett importálva (pl. Macintosh), akkor True esetén a Windows verzióban lesz elmentve.
  • SaveFormsData: True esetén elmenti azokat az adatokat is, melyeket a dokumentum adatainál adott meg a felhasználó.
  • SaveAsAOCELetter: ha a dokumentum egy levél melléklete, akkor True esetén AOCE levélként menti el.



Oldalbeállítás
A Word-ben megszokhattuk, hogy a papírméretet és a margókat tetszés szerint beállíthatjuk. Ezt természetesen programból is megtehetjük, felhasználva ehhez az ActiveDocument.PageSetup property-t. A legfontosabb mezői a property-nek a következők:
var
  ps: PageSetup;
…
ps := WordApp.ActiveDocument.PageSetup;

ps.PaperSize := wdPaperA4;
ps.LeftMargin:=WordApp.CentimetersToPoints(3);
ps.TopMargin:=WordApp.CentimetersToPoints(2,5);
ps.RightMargin:=WordApp.CentimetersToPoints(2);
ps.BottomMargin:=WordApp.CentimetersToPoints(2,5);

WordApp.ActiveDocument.PageSetup := ps;
A margók megadásánál látható, hogy a CentimetersToPoints függvényét használtuk, mivel a margók méretét pontban kell megadni. A PaperSize property-nél a következő konstansokat használhatjuk: wdCustomLabelA4, wdCustomLabelA4LS, wdCustomLabelA5, wdCustomLabelA5LS, wdCustomLabelB4JIS, wdCustomLabelB5, wdCustomLabelFanfold, wdCustomLabelHigaki, wdCustomLabelHigakiLS, wdCustomLabelLetter, wdCustomLabelLetterLS, wdCustomLabelMini, wdCustomLabelVertHalfSheet, vagy wdCustomLabelVertHalfSheetLS.


Nyomtatás
A dokumentum nyomtatását kétféleképpen is megoldhatjuk. Az első eset egyszerűbb, mert itt csak a nyomtatási képet jelenítjük meg, a többit rábízzuk a felhasználóra:
WordApp.ActiveDocument.PrintPreview;
Ezzel nincs is semmi gond, még paramétereznünk sem kell. Ellenben a másik megoldás, amikor azonnal a nyomtatóra küldjük a dokumentumot. Ehhez az ActiveDocument.PrintOut metódust kell használnunk.
WordApp.ActiveDocument.PrintOut(Background, Append, Range, 
   OutputFileName, From, To, Item, Copies, Pages, PageType, 
   PrintToFile, Collate, FileName, ActivePrinterMacGX, 
   ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, 
   PrintZoomPaperWidth, PrintZoomPaperHeight);
  • Background: True esetén a program futása folytatódik a nyomtatás elkezdése után. False setén a program futása addig nem folytatódik, amíg a dokumentum kinyomtatása nem fejeződött be.
  • Append: lásd. OutputFileName
  • Range: WdPrintOutRange típusú paraméter, melynek a következő értékei lehetnek: wdPrintAllDocument, wdPrintCurrentPage, wdPrintFromTo, wdPrintRangeOfPages, vagy wdPrintSelection
  • OutputFileName: ha a nyomtatás fájlba történik, akkor a fájl neve.
  • From: ha a Range paraméter wdPrintFromTo akkor a kezdő oldal száma.
  • To: ha a Range paraméter wdPrintFromTo akkor a befejező oldal száma.
  • Item: WdPrintOutItem típusú paraméter: wdPrintAutoTextEntries, wdPrintComments, wdPrintDocumentContent, wdPrintKeyAssignments, wdPrintProperties, vagy wdPrintStyles.
  • Copies: példányszám.
  • Pages: a nyomtatandó oldalak sztring formátumban, ugyanúgy megadva, ahogyan azt a Word-ben megszokhattuk (pl. "3-5, 7").
  • PageType: WdPrintOutPages típusú paraméter: wdPrintAllPages, wdPrintEvenPagesOnly, vagy wdPrintOddPagesOnly
  • PrintToFile: True érték esetén fájlba nyomtat (lásd. OutputFileName).
  • Collate: több példány nyomtatása esetén ha az értéke True, akkor először kinyomtatja az összes oldalt, és utána kezdi elölről a nyomtatást.
  • FileName: ha a metódust közvetlenül az _Application osztályból hívjuk meg, akkor annak a fájlnak a neve, amit nyomtatni akarunk. Az ActiveDocument osztályban nem használható!
  • ActivePrinterMacGX: Ez a paraméter csak a Microsoft Office 98 Macintosh Edition-ben használható.
  • ManualDuplexPrint: kétoldalas nyomtatáskor használható.

Az előző metódushoz képest négy új paraméter van:
  • PrintZoomColumn: oldalak száma aminek el kell férni a nyomtatási képen vízszintesen.
  • PrintZoomRow: hasonló, mint az előző, de itt a függőlegesen megjelenítendő oldalak számát kell megadni.
  • PrintZoomPaperWidth: a nyomtatási kép szélessége, amibe az oldalnak bele kell férnie.
  • PrintZoomPaperHeight: a nyomtatási kép magassága, amibe az oldalnak bele kell férnie.



A Word bezárása
A Word bezárása a Quit metódussal történik. Ennek három paramétere lehetséges:
WordApp.Quit(SaveChanges, Format, RouteDocument);
  • SaveChanges: WdSaveOptions típusú paraméter, lehetséges értékei: wdDoNotSaveChanges, wdPromptToSaveChanges, vagy wdSaveChanges.
  • Format: WdOriginalFormat típusú paraméter, lehetséges értékei: wdOriginalDocumentFormat, wdPromptUser, vagy wdWordDocument.



Szöveg beírás, új sor kezdés
Szöveg beviteléhez az aktív dokumentumba a Selection osztályra lesz szükségünk. Ennek TypeText metódusával írhatunk szöveget az aktív dokumentumba az aktuális kurzorpozíciótól.
WordApp.Selection.TypeText('Animare Software');
Az így beírt szöveg nem egy új bekezdésbe történik, hanem úgy, mintha billentyűzetről gépeltük volna azt be. Új bekezdés kezdéséhez a TypeParagraph metódust kell használnunk, aminek nincs paramétere. Ennek a metódusnak a hatása megegyezik azzal, mintha az Enter billentyűt leütöttük volna.
WordApp.Selection.TypeParagraph;

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).
WordApp.Selection.Goto(What, Which, Count, Name);
WordApp.Selection.GotoNext(What);
WordApp.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.


Office cikksorozat