HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Word dokumentumokat egyesítő komponens készítése


Példaprogram letöltése

7502 bájt

Készítünk egy komponenst, amely segítségével Microsoft Word dokumentumokat egyesíthetünk. Meg kell adnunk egy könyvtárat. A komponens végignézi a megadott könyvtár tartalmát, és a megtalált rtf és doc kiterjesztésű állományok tartalmát egyesíti egy új dokumentumba. Az új dokumentumba, igény szerint, a bemásolt állományok elérési útja és neve is bekerül.

A mellékelt példaprogram megnyitása előtt a WordCat.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens Címsor1 stílust használ, amely csak magyar nyelvű Office esetében létezik. Angol nyelvű Office használata esetén a forráskódban lévő Címsor1 hivatkozásokat javítsa Heading1-re.
A komponens Directory tulajdonságában kell megadni annak a könyvtárnak a nevét, amelyben keresni szeretnénk. Ha azt akarjuk, hogy az egyesített dokumentumba a megtalált rtf és doc állományok elérési útja és neve is bekerüljön, akkor az AddFileInfo property értékét igazra kell állítanunk.
A keresés és egyesítés a Search metódus meghívására kezdődik. Ha a művelet véget ért, akkor a Directory-ban beállított könyvtárban létrejön egy új Word dokumentum, melynek neve megegyezik a megadott könyvtár elérési útjában szereplő utolsó könyvtár nevével. A megtalált dokumentumok a megtalálás sorrendjében kerülnek rögzítésre.
A komponens rendelkezik egy eseménnyel, ez az OnFind.
TFindEvent = procedure(Sender: TObject; FileName: String; var InsertString: String; var InsertStyle: String) of object;
Az esemény minden egyes alkalommal lefut, amikor a komponens egy új dokumentumot talál. A megtalált dokumentum nevét a FileName paraméter értéke adja meg. Ha az InsertString változóban megadunk egy szöveget, akkor az bekerül az egyesített dokumentumba, a bemásolandó szövegrész elé. Az InsertStyle paraméterben megadhatunk egy stílust. Az InsertString tartalma ezzel a stílussal kerül beírásra.
A WordCat komponenst a TComponent osztályból származtatjuk.
A Directory tulajdonsághoz tartozó SetDirectory metódusban ügyelnünk kell arra, hogy a megadott könyvtár neve mindig a „\” karakterre végződjön.
FDirectory:=Value;
if Length(Value)>0 then
  if Value[Length(Value)]<>'\' then
    FDirectory:=FDirectory+'\';
Létre kell hoznunk egy függvényt, amely a Directory property-ben megadott elérési útból meghatározza a létrejövő dokumentum nevét. A dokumentum neve meg fog egyezni az elérési útban szereplő utolsó könyvtár nevével.
function TWordCat.GetName: String;
A SetDirectory metódusban gondoskodtunk arról, hogy a megadott könyvtár elérési útja „\”-re végződjön. Az új állomány nevének meghatározásakor ezt a karaktert nem kell figyelembe vennünk.
A név meghatározásakor különbséget kell tennünk a főkönyvtár és az alkönyvtárak között. Ha a megadott elérési út a főkönyvtár, akkor az állomány neve a meghajtó betűjele lesz, minden más esetben az elérési út végén szereplő két „\” karakter közötti szövegrész.
A keresést és az összemásolást a Search metódus hajtja végre.
A Search metódus
procedure TWordCat.Search;
var
  F: TSearchRec;
  WordApp: OleVariant;
A háttérben megnyitjuk a Word programot. Ezt egy OleVariant típusú objektumon keresztül tehetjük meg. Az OleVariant típus használatához, a uses listában fel kell sorolnunk a COMOBJ unit nevét is.
A Word programot a CreateOleObject utasítással nyithatjuk meg, az Add metódussal pedig egy teljesen üres, új dokumentumot kezdhetünk.
A megadott könyvtárban a FindFirst – FindNext utasításpárossal megkeressük az rtf és doc kiterjesztésű állományokat.
A FindFirst – FindNext könyvtárak és állományok keresésére is alkalmas. Hogy a feldolgozást csak állományok esetében kezdjük el, a következő feltételt kell alkalmaznunk.
if (F.Attr and faDirectory)=0 then
Ha találtunk egy állományt, akkor meghívjuk az OnFind eseményt.
if Assigned(FOnFind) then
 FOnFind(Self,FDirectory+F.Name,Insert,InsertStyle);
Ha a felhasználó módosította az Insert tartalmát, akkor azt beírjuk a dokumentumba, az InsertStyle-ban megadott stílussal.
if Insert<>'' then begin
  WordApp.Selection.Paragraphs.Style:=InsertStyle;
  WordApp.Selection.TypeText(Insert);
  WordApp.Selection.TypeParagraph;
end;
Ha az AddFileInfo értéke igaz, akkor az állomány elérési útját és nevét beírjuk a dokumentumba, Címsor 1 stílussal.
A megtalált állományt meg kell nyitnunk.
WordApp.Documents.Open(FDirectory+F.Name);
Miután megnyitottuk, az lesz az aktív dokumentum, így annak bezárásáig minden egyes művelet rá fog vonatkozni.
A dokumentum tartalmát a vágólapon keresztül másoljuk át az új dokumentumba.
WordApp.Selection.SetRange(0,WordApp.ActiveDocument.Content.End);
WordApp.Selection.Copy;
Mielőtt a vágólapról beillesztenénk a dokumentumot az új állományba, be kell zárnunk a megnyitott forrásdokumentumot.
WordApp.ActiveDocument.Close;
WordApp.Selection.Paste;
Miután a keresési ciklus lefutott, nem marad más hátra, minthogy elmentsük az egyesített dokumentumot, és bezárjuk a Word-öt.
WordApp.ActiveDocument.SaveAs(FDirectory+GetName);
WordApp.ActiveDocument.Close;
WordApp.Quit;

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 40. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |