Oldal: 1 / 1
[M] Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 13., csütörtök 7:58
Szerző: editor
Szerkesztett: M=megválaszolva, megkerülve, részben megoldva. Az angol nyelvű fórumon író mértékadó segítők szerint gyakorlott (de OO-ban új) felhasználónak egy hónap tanulás kell, mire elkezdhet makrózni. Itt nem úgy megy a makrózás, hogy elindítom a makrófelvevőt, elvégzek műveleteket mint egyszerű buta felhasználó, leállítom a felvevőt, aztán használom a makrót. Ismerni kell a makrónyelvet (valamelyiket) és az API-kat. Akinek megéri, annak rá kell szánnia az időt.
Az ismétlődő keresés / csere műveletekre viszont kiválóan alkalmas a Writer Szerkesztés / Keresés és csere funkciója (sokkal többet tud, mint az ember gondolná, csak meg kell tanulni a "reguláris kifejezések" nevű, meglehetősen érthetetlenül leírt tudományt. Még ennél is több lehetőségünk adódik az Alternative Search http://extensions.openoffice.org/en/project/AltSearch kiegészítőt. Nekem az megoldotta a problémámat, a makróírást pedig elhalasztottam egy kiadós tanulás utánra. |
Sziasztok, nem ismerem még az OpenOffice makrószerkesztés nyelvét. Ha valaki tud, kérem, segítsen.
Készítettem egy makrót, ami megkeres egy stringet, elmegy a string feletti bekezdésbe, arra alkalmaz egy bekezdés stílust, majd lejjebb viszi a kurzort, hogy a következő keresés ne megint a már megtalált stringet találja meg újra.
Ezt a makrót szeretném ismételgetni mindaddig, amíg van találat. Loop készítésének ismerete híján úgy gondoltam, elegendő lesz ráfeküdni a makróhoz rendelt gyorsbillentyűre, de sajnos nem. Ha az automatikus billentyűismétlés sebességével adom be a makró gyorsgombját, akkor legnagyobb sajnálatomra hibázik. Ha lassan nyomogatom a gombot, akkor pontos, de a gyors ismétlésnél úgy tűnik, mintha megzavarodna, és olyan sorokat is átformáz, amiket nagyon nem kellene. Abban bízom, hogy ha sikerülne megtanulnom a do .. loop .. until szintaktikáját és a kiugrás feltételét, akkor hibátlanul végigcsinálná a feladatát, és nem zavarná meg az, hogy billentyűket is nyomkodok, meg a makró maga is billentyűnyomások végrehajtásával próbálkozik.
Egy példa-makró sokat segítene, amiben van keresés, és ami kiugrik a loopból, ha nem volt találat. Előre is köszönöm.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 13., csütörtök 8:20
Szerző: Zizi64
Üdv!
Az LibreOffice-t és az OpenOffice-t is számos programozási nyelven írt programmal lehet vezérelni.
Ahhoz, hogy vezérelni tudd a LibreOffice-t, mindenképpen ismerned kell az API-t, a LibreOffice programozási felületét. Az API azoknak az eljárásoknak, függvényeknek az összessége, amelyeknek a saját programodból történő meghívásával el tudod érni a kívánt célodat.
http://wiki.services.openoffice.org/wik ... /API_Intro
http://api.openoffice.org/
Beépített IDE-vel (fejlesztőkörnyezettel: tehát programkód szerkesztővel, interpreterrel) rendelkezik a StarBasic más néven OOo Basic. Sokan szidják ezt az "elavult" programozási nyelvet, de én ebben írtam az eddigi makróimat, és működnek...
http://user.services.openoffice.org/hu/ ... f=22&t=427
http://wiki.services.openoffice.org/wik ... ASIC_Guide
(visszatérek még, most nincs több időm...)
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 13., csütörtök 10:54
Szerző: editor
Köszönöm szépen, sokat segítettél. Ezek alapján meg fogom tanulni valamelyik módszert, de biztos, hogy egy órán belül nem jutok eredményre. Ehhez programozni kell tanulni.
Lehetne ennél valami felhasználóbarátabb megoldást is kitalálni az OpenOffice-ba, mert ez nagyon gyakori feladat, és a neten sokan keresik a megoldást, de csak programozási kézikönyveket találnak, és inkább feladják (vagy programozók - nem minden szövegfeldolgozással foglalkozó ember az).
o Tedd a következőket, amíg a feltétel fennáll
- Végezz el pár műveletet
- Keress olyan szöveget, ami valamilyen tulajdonsággal rendelkezik
o Ha volt találat, menj az elejére, és folytasd, egyébként fejezd be.
Az emberek ilyeneket szeretnének csinálni (én is), és nem találják a módját, csak ha új szakmát tanulnak hozzá.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 13., csütörtök 18:01
Szerző: Zizi64
Itt egy jó kis példa a keresésre és a ciklusra:
http://www.oooforum.org/forum/viewtopic.phtml?t=23045
(a "kurzornak a megtalált szóra mozgatása" és a "stílus ráhúzása az ezt megelőző bekezdésre" ebben nem szerepel.)
másik hasonló példa, ami a megtalált összes szó után beszúr egy új bekezdést:
http://www.oooforum.org/forum/viewtopic.phtml?t=106046
Makró ügyben Andrew Pitonyak írásaira érdemes odafigyelni:
http://www.pitonyak.org/oo.php
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 13., csütörtök 18:20
Szerző: Zizi64
Másik lehetséges megoldás az AltSearch kiterjesztés. Ez képes kikeresni az összes szót, és az azt tartalmazó bekezdést (nem az előzőt, nem a követőt, hanem pont azt) a megadott nevű stílusúra módosítani:
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 14., péntek 14:32
Szerző: editor
Köszönöm szépen a válaszokat. Sokat segítenek majd, ha lesz időm végig megérteni a hivatkozottakat. A linkeket mind megnyitottam, de amit ott olvastam, Ariadné fonalának a vége, amin majd egyszer végigmegyek a labirintuson.
Őszintén szólva olyat reméltem, hogy valahonnan megtudom, milyen nevű rendszerváltozóban adja vissza a
"dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())" nevű szörnyeteg azt az információt, hogy legutóbb sikerült-e találnia valamit. Ha egyáltalán visszaadja.
Ami a 'mindet lecseréljük egycsapásra' dolgot illeti, azt jó tudni, de nekem most nem ez kell, mert én a megtalált sorokon sokkal több dolgot akarok elvégezni, mint a stílusváltás.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 14., péntek 16:47
Szerző: Zizi64
"dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())"
Aha, szóval nem "írtad" , hanem "rögzítetted, felvetted" a makrót... A makrórögzítő nem a legideálisabb megoldás, ha igazán hatékonyan akarod programozni a LibreOffice-t. Nem vesz fel minden aktivitást, szerintem nehezebb kézzel módosítani a felvett kódot, - mint a te példád is mutatja: nem nagyon lehet a "diszpécser"-ből visszatérési értéket kisajtolni... Persze én is használom, nem is ritkán...
Az általam belinkelt keresés visszajelez, hogy talált-e valamit, de abban a példában meg nincs valós mozgás a dokumentumban, a megtalált szöveg bekezdése nem válik az éppen aktív bekezdéssé attól, hogy a szöveg "meg lett találva". Így nem tudod éppen ott alkalmazni a stílus ráhúzást...
Talán, ha két módszert ötvözöd, azaz mindkét keresést futtatod - csúnya megoldás, de hátha működik - az egyik keresés csak a ciklus számláló számára keres, a másik meg oda is vezérli a kurzort a találathoz...
Tudom, nem elegáns megoldás, de hátha a megvalósítás közben fény gyullad...
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 18., kedd 7:02
Szerző: editor
Nagyon köszönöm a segítségedet, de sajnos nem tudtam felfogni, hogyan kell kiugranom egy ciklusból, ha már nincs több találat arra, amit keresek. Biztos bennem van a hiba, de most nem tudtam elég időt és figyelmet fordítani arra, hogy egy számomra idegen és ellenséges környezet nyelvét, szokásait megtanuljam. Nagy csalódás, mert ha ez a cikusból kiugrás meglett volna, akkor egy nagyot léphettem volna előre az OpenOffice elfogadtatásával a környezetemben.
Azt szeretem az autóvezetésben, hogy nem kell megtanulnom esztergálni és kereket centírozni ahhoz, hogy A-ból B-be eljuthassak. Az is igaz, hogy az autóért fizetek.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 18., kedd 7:47
Szerző: Zizi64
hogyan kell kiugranom egy ciklusból, ha már nincs több találat arra, amit keresek.
Erre ott a kész példa, amit belinkeltem.
De ha feltöltenéd ide a félig kész makródat, többet tudnánk segíteni, valószínűleg...
Használd a "Code" tag-et, vagy .odt mintafájlban, a mintaszöveggel együtt együtt tudod feltölteni.
hogy egy számomra idegen és ellenséges környezet...
Idegen és ellenséges az, ahol tanulni kell és lehet, és ingyen adnak egy igen nagy tudású programot? (az összes hibáját a mérlegre téve is az az eredmény, hogy nagyon hasznos program - szerintem.)
Az, hogy idegen, az még talán érthető...
Ha egyetlen cég egyetlen megoldását ismered (annak használatában lettél profi) akkor kényelmetlen átállni egy másik gondolkodásra. Én így vagyok a Linux-szal. Képtelen vagyok mind a mai napig felfogni, elfogadni a telepítések, és egyéb rendszerszintű tevékenységek logikáját, megvalósítási módját.
...De hogy ellenséges lenne?! A Fórumra gondolsz? A Fórum nem egyenlő a LibreOffice-szal, az OpenOfice.org-gal. De mi se vagyunk ellenségesek, szerintem. (legfeljebb azokkal, akik ezt "kivívják maguknak. Volt már példa rá, hogy valaki majd' 150 hozzászólás után is még mindig csak kérdezett, és kérdezett, de gyakorlatilag soha nem próbált meg másoknak segíteni, vagy önmaga utánaolvasni a dolgoknak, miközben fanyalgott, hogy ilyen, meg olyan a program... Én őszinte ember vagyok, megmondtam neki a véleményemet, így nyilvánosan...
Vagy a fejlesztőkre gondolsz? Szerintem ők se ellenségesek.
A program meg pláne nem az.
Van, hogy csak annyit tudunk segíteni, amennyit a téma alatt leírva látsz. Nem eltitkoljuk: ennyit tudunk. Mivel mi pont olyan felhasználók vagyunk itt a Fórumon, mint te.
Nem a te hozzáállásodon kellene egy kicsit változtatni? Próbáld meg. Megéri!
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 19., szerda 5:17
Szerző: editor
Bocsánat, nagyon félreértettél! Egyáltalán nem a szakmai segítő fórumok közösségére gondoltam akkor, amikor azt írtam, hogy ellenséges környezet (sőt, a ti segítségeteket nagyon nagyra értékelem), hanem a programra, mint alkalmazásra, felhasználói környezetre, ami addig nem enged megoldani bizonyos alapvető feladatokat, amíg egy igen bonyolult tanulási folyamaton (pl. programnyelv, api, függvények) át nem esik a felhasználó.
Programozónak ez maga a kánaán, nem programozó pedig átmenetileg elakad. Még nem tudom megbecsülni, hány munkaóra kell a szükséges ismeretek elsajátítására, és még azt sem látom át teljesen, hogy milyen anyagokat kell elolvasni ahhoz, hogy meg tudjak írni egy "csináld mindaddig, amíg van találat" ciklust. Vannak rendszerek, ahol ez nem programozói, hanem felhasználói feladat, és könnyen elvégezhető. Itt az egyik példa, amit segítségként kaptam:
Kód: Egész kijelölése
Sub Main
Dim vDescriptor
Dim vFound
oDoc = ThisComponent
REM Create a descriptor from a searchable document.
vDescriptor = oDoc.createSearchDescriptor()
REM Set the text for which to search and other
REM http://api.openoffice.org/docs/common/ref/com/sun/star/util/SearchDescriptor.html
With vDescriptor
.SearchString = "-"
.SearchWords = false
.SearchCaseSensitive = false
.SearchBackwards = false
End With
REM Find the first one, or last one as it were!
vFound = oDoc.findFirst(vDescriptor)
Do While Not IsNull(vFound)
if not IsEmpty(vFound.CharFontName) then
if vFound.CharFontName = "Times New Roman" then
vFound.CharFontName = "Symbol"
endif
endif
vFound = oDoc.findNext( vFound.getEnd(), vDescriptor)
Loop
End Sub
Ez tök jó, de nekem nem baráti (hanem ellenséges), mert nem tudok (még) vele mit kezdeni, nem tudom a saját példámra alkalmazni, nem értem meg belőle, hogy hogyan ugrok ki a ciklusból az utolsó találat után, és a feladatot, amit szerettem volna, nem tudtam elvégezni. Én hibám, elnézést, ha magadra vetted az önostorozásomat.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 19., szerda 10:44
Szerző: Zizi64
Javítottam az idézett kódodat: a "code" taggel átláthatóbbá válik a feltöltött kód.
mert nem tudok (még) vele mit kezdeni, nem tudom a saját példámra alkalmazni, nem értem meg belőle, hogy hogyan ugrok ki a ciklusból az utolsó találat után,
Ez a példa működőképes, addig keres, amíg talál újabbat a megadott (formázott) szövegből, tehát a végén ez "kiugrik" a Do-Loop ciklusból. Ahogy ebben a példában meg lett valósítva, úgy kell neked is csinálnod.
Valószínűleg értem én azért a problémádat: a makrórögzítővel rögzített makróban nem tudod megvizsgálni, hogy volt-e találat, mert ilyen információt nem ad vissza a Dispatcher. Erre mondtam azt, hogy kombináld a példa kódot a tiéddel: Vizsgáld a példakódban megadott módon a találatot, de ugyanakkor kerestess a Dispatcherrel is.
Ha feltöltenéd a félkész kódodat, esetleg megpróbálhatom ötvözni a két megoldást, de a te kódod nélkül nem kezdek hozzá... Ismernem kell a te keresési kritériumaidat, hogy azt hogyan adod meg, milyen változókat használsz, stb.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 20., csütörtök 19:41
Szerző: editor
Köszönöm szépen, nem élnék vissza a helyzettel, nem kérem, hogy nekem írd meg a kódot. Majd visszajövök a megoldással, ha megtanultam az OpenOffice API-kat és legalább a VisualBasic-et. A fenti kódrészletből jelenleg azt sem értem, hogy melyik a függvény, ami megmondja, hogy volt-e találat, és nem tudom, hogy mi a szintaxisa. Majd megtanulom, maradjunk annyiban, hogy ez a feladat a jelenlegi tudás-szintemen nem megoldható.
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 21., péntek 7:43
Szerző: Zizi64
ha megtanultam az OpenOffice API-kat és legalább a VisualBasic-et.
Most megint nem értem:
Nem az Office programon belül futó makrót szeretnél írni, hanem kívülről, más alkalmazásból szeretnéd vezérelni a Writert? (Az is lehetséges, de olyat én még nem csináltam.)
...Mert VisualBasic (VB) Vagy Visual Basic for Application (VBA) nevű rendszer az nincs a Libre/OpenOffice-ben. Az a Microsoft márkaneve és találmánya (ha jól tudom).
Ugyan létezik egy opció,
aminek a bekapcsolásakor a LibreOffice megpróbálja értelmezni a VBA kódot is, de mivel az se ad(hat) száz százalékos kompatibilitást, célszerűbb a beépített fejlesztőrendszer nyelvét használni.
Vagy csak a nevét (StarBasic, OOBasic) nem tudod jól még a létező programnyelvnek?
Re: Keresésen alapuló makró ismétlése az utolsó találatig
Elküldve: 2011. október 23., vasárnap 18:10
Szerző: editor
Nem, egyelőre nem kívülről szeretném megoldani a dolgot, csak a jelen ismereteim ezek szerint még ahhoz sem elegendőek, hogy kérdezzek az OpenOffice-ról. A Basic, amit a makrónyelv használ, avatatlan szememben visual basic-nek tűnt, ezért kevertem ide (a szabatosság teljes mellőzésével) a kifejezést. Egy biztos, a sok programozási nyelv közül, amit az OpenOffice megért, valamelyiket meg kell tanulnom ahhoz, hogy használni tudjam a makró funkciókat.