HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Számok cseréje egy Word dokumentumban


Példaprogram letöltése

6437 bájt

Készítünk egy komponenst, mely segítségével egy megadott Word dokumentum, megadott stílussal rendelkező bekezdéseiben kicserélhetjük a bekezdés elején álló számot. A példa bemutatja, hogy hogyan lehet egy Word dokumentum bekezdéseit, szavait használni, valamint, hogy hogyan lehet egy szót kicserélni.

A mellékelt példaprogram megnyitása előtt a WordCodeChange.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens WordDoc tulajdonságában adhatjuk meg annak a Word dokumentumnak a nevét, amelynek tartalmát módosítani szeretnénk. A ParagraphStyle property-ben meg kell adnunk egy stílust. A komponens csak azokat a bekezdéseket veszi figyelembe, amelyek ezzel a stílussal rendelkeznek.
A számok kicserélésére az OnChange eseményen keresztül van lehetőségünk.
TChangeEvent = procedure(Sender: TObject; Found: String; var ChangeTo: String) of object;
Az esemény minden egyes alkalommal létrejön, amikor a komponens talál egy számot. A talált szám a Found paraméter segítségével lekérdezhető. A ChangeTo változóban kell megadnunk azt a szöveget, amelyre a számot cserélni szeretnénk. Ha a ChangeTo értékét nem módosítjuk, akkor a szám változatlan marad.
A komponenst a TComponent osztályból származtatjuk.
Az OnChange esemény létrehozásához el kell készítenünk a TChangeEvent típust.
Amikor a Word-ben kijelölünk egy szót, akkor a mögötte álló szóköz is kijelölésre kerül. Az így kapott szöveget már nem tudjuk számmá konvertálni. Két eset lehetséges. Az egyik, hogy a kijelölt szöveg mögött szóköz van, a másik, hogy nincs. A RemoveLastSpace függvény megvizsgálja a kapott String-et.
function RemoveLastSpace(s: String): String;
Ha a szöveg végén szóközt talál, akkor azt törli.
A komponens működésének lényege a Search metódusban található.
procedure TWordCodeChange.Search;
A WordDoc property-ben megadott Word dokumentumot a háttérben nyitjuk meg. A kapcsolat felépítéséhez a WordApp, OleVariant típusú objektumot használjuk. Az OleVariant típus használatához a uses listában fel kell sorolnunk a COMOBJ unit nevét is.
Első lépésben meg kell nyitnunk magát a Word programot, majd be kell tölteni a megadott dokumentumot.
WordApp:=CreateOleObject('Word.Application')
WordApp.Documents.Open(FWordDoc);
Végig kell néznünk az összes bekezdést. Erre egy for ciklus kiválóan alkalmas. A bekezdések számát az alábbi módon kérdezhetjük le.
for i:=1 to WordApp.ActiveDocument.Paragraphs.Count do begin
Mindig ki kell választanunk azt a bekezdést, amellyel éppen foglalkozni szeretnénk.
Paragraph:=WordApp.ActiveDocument.Paragraphs.Item(i);
A bekezdés stílusát a NameLocal tulajdonságán keresztül kérdezhetjük le. A bekezdés Range tulajdonsága adja meg a bekezdés kezdetét és végét a Word dokumentumon belül.
Range:=Paragraph.Range;
WordApp.Selection.SetRange(Range.Start,Range.End);
A Selection osztály segítségével kijelölhetjük az aktuális bekezdést. Ez arra jó, hogy a kijelölt bekezdésben szereplő szavak bekerülnek a Selection osztály Words tulajdonságába. Innen könnyedén lekérdezhetjük a bekezdés első szavát.
Found:=WordApp.Selection.Words.Item(1);
A RemoveLastSpace függvényt használva, a szó végéről levágjuk a szóközt, ha az létezik, majd az így kapott szót megpróbáljuk számmá konvertálni.
l:=StrToIntDef(ChangeTo,-1);
Az StrToIntDef függvény ugyanúgy működik, mint az StrToInt, azonban hibás számformátum esetén nem ad hibajelzést, helyette a második paraméterben megadott számot adja eredményül.
Miután megtaláltunk egy számot, le kell futtatnunk az OnChage eseményt. Itt a felhasználó megadhatja, hogy mire kívánja cserélni a talált számot. A felhasználó által megadott érték a ChangeTo változóba kerül.
Ezután, ismét a Selection osztályt használva, kijelöljük a bekezdés első szavát, majd felülírjuk a ChangeTo tartalmával.
WordApp.Selection.Words.Item(1).Select;
WordApp.Selection.TypeText(ChangeTo);
Sokkal egyszerűbb megoldás lenne, ha a Words.Item(1) értékét módosíthatnánk a ChangeTo tartalmára. Ezt azonban nem tehetjük meg, mert a Words tömb elemei csak olvasható property-k. Ezért szükséges a kijelölés és átírás trükköt használni.
Ha a kereső algoritmus lefutott, nem marad más hátra, mint hogy elmentsük a dokumentumot és kilépjünk a Word-ből.
WordApp.ActiveDocument.Save;
WordApp.Quit;

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 85. 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 |