Oldal: 1 / 1

Calc-ból Writer sablonban lévő makró meghívása

HozzászólásElküldve: 2014. július 4., péntek 1:07
Szerző: machobymb
Sziasztok!

Több felé nézelődtem, de nem találok megoldást a következő problémámra:
Excel fájlokat kapok, melyekből cellák tartalmát másolom egy újabb táblázatba, aminek minden sora egy fájl tartalmát tartalmazza.
Ennek az összesítő táblának a sorok utolsó cellája egy PDF-re mutató linket tartalmaz, amit egy Writer sablonból fogok legenerálni. Ha a linkre kattintok, elindul egy BASIC makró, ami meghívna a Writer sablonból egy másik makrót, bizonyos paraméterekkel. Itt akadok el, mert nem tudom, hogyan érjem el azt a makrót.
Így érem el a fájlt:
Kód: Egész kijelölése   KinyitásÖsszecsukás
   oProp(0).Name="AsTemplate"
   oProp(0).Value=True
   oProp(1).Name="MacroExecutionMode"
   oProp(1).Value=com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
   sUrl = convertToURL(sMAPPA & "/" & sSABLON)
   StarDesktop.loadComponentFromURL( sUrl, "_blank", 0, oProp())

De a nyitott sablon mindig más nevű fájlt eredményez (Névtelen1, Névtelen2, ...). Gondoltam arra, hogy a makrót beteszem a Saját makrók és párbeszédablakok -> Standard ->Module1 helyre, de mivel több gépről használnám hálózati meghajtóról, az minden gépen makrómásolgatást igényelne.Hogyan érem el azt a makrót, ami ezekben van?
Eredetileg MS Office alatt működött egy változat, de át szeretném írni OOo alá. Nem hiszem, hogy nem oldható meg.

Köszönöm előre is a segítséget!

Re: Calc-ból Writer sablonban lévő makró meghívása

HozzászólásElküldve: 2014. július 4., péntek 7:43
Szerző: Zizi64
Gondoltam arra, hogy a makrót beteszem a Saját makrók és párbeszédablakok -> Standard ->Module1 helyre, de mivel több gépről használnám hálózati meghajtóról, az minden gépen makrómásolgatást igényelne.Hogyan érem el azt a makrót, ami ezekben van?


1. Pedig ez az egyik, és ráadásul a legbiztosabban működő megoldás.
Létezik arra megoldás, hogy automatikusan másold a makróidat egy adott gépen a LO/AOO Standard könyvtárába... Itt volt erről szó, igaz a megvalósított makró az EGÉSZ Standard könyvtárat másolja, nem csak egyes makrókat, de biztos ki lehet hámozni a kódból alkalmazható részleteket:
https://forum.openoffice.org/hu/forum/v ... =16&t=1076



Biztosan tudod, hogy AUTOMATIKUSAN csak a "Standard" nevű könyvtárak töltődnek be a memóriába, csak az azokban lévő függvényeket, eljárásokat tudod külön betöltési procedúra nélkül használni. De van lehetőség más (nevű) könyvtárakban is tárolni a makrókódot, csak akkor gondoskodni kell a betöltésükről a futtatásuk előtt.


További ötleteim:

2. Ne sablonfájlba, hanem dokumentumfájlba tedd a makrót, annak megnyitáskor már létezik URL-je. Más néven menteni meg ezt is tudod makró által, akár a megnyitás után rögtön is (ha attól félnél, hogy valaki megváltozott, vagy hibás állapotban "visszamentené" az eredeti helyére a fájlodat).


3.: Ha mégis a sablonfájl az egyedül üdvözítő megoldás számodra valami miatt, akkor az automatikus megnyitás után mentsd el a sablonfájl (program által) egy adott néven, dokumentumként/másik sablonként valami "temp" könyvtárba, aminek te határozod meg az elérési útvonalát. A "frissen megnyitott" - NévtelenX - nevű dokumentumot is "meg lehet fogni" makrókóddal, ha a tartalmát akarod módosítani. Azt sajnos nem tudom, hogy ez az elérési lehetőség hogyan alkalmazható a dokumentumon belül lévő makrókönyvtárra.

Kód: Egész kijelölése   KinyitásÖsszecsukás
oDocB as object

oProp(0).Name="AsTemplate"
   oProp(0).Value=True
   oProp(1).Name="MacroExecutionMode"
   oProp(1).Value=com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
   sUrl = convertToURL(sMAPPA & "/" & sSABLON)
   
oDocB = StarDesktop.loadComponentFromURL( sUrl, "_blank", 0, oProp())


Ezután már hivatkozhatsz az oDocB-re, mint megnyitott dokumentumra, akkor is, ha még nincs saját URL-je (még nincs mentve). De mondom még egyszer, azt nem tudom, hogy a dokumentumban lévő "Saját" makrókönyvtárat (Nem a "Standerd"-ot) így be lehet-e tölteni a memóriába.

Információk a témában:
https://wiki.openoffice.org/wiki/Docume ... a_function
https://forum.openoffice.org/en/forum/v ... 20&t=60432
https://wiki.openoffice.org/wiki/Docume ... from_Basic
Utóbbiból ajánlom figyelmedbe az alább idézett részt:
Application library containers can be accessed from document-embedded Basic libraries using the GlobalScope property, for example, GlobalScope.BasicLibraries.Library1.

Ez mintha arról szólna, hogy egy dokumentumból is lehet betölteni programkód által egy NEM "Standard" nevű könyvtárat.


4. Tedd a kiindulási dokumentumba az összes makródat. Lehet egy Writer fájlban is Calc fájlra vonatkozó makró is, ezt semmi nem tiltja...


5. Írd meg kiterjesztésként a makróidat, akkor is könnyebb valamivel a terjesztésük a különböző gépek között.

Re: Calc-ból Writer sablonban lévő makró meghívása

HozzászólásElküldve: 2014. július 10., csütörtök 11:50
Szerző: machobymb
Leírom a konkrét szituációt, hátha úgy könnyebb kiválasztani a megfelelő megoldást (bár szerintem marad az 1.-es):
Földhivatal Takarnet rendszeréhez csinálunk lekérdezéseket, amit naplóznunk kell. Ehhez azt találtuk ki M$ Office alatt, ami eddig működött, hogy aza ügyintéző elküld egy Excel fájlt a lekérdezés adataival. Nekem van egy Excelben elkészített naplóm, ami átemeli az adatokat belőle. A napló minden sora egy kapott táblázatnak felel meg. Minden sorból létre kell hozni egy Word dokumentumot, amibe adatokat emelünk ebből a naplófájlból (ezek eddig függvényparaméterek voltak). Ezt most át kellene ültetni LibreOffice alá, ráadásul az sem lesz baj, ha Win és Linux alatt egyaránt működik.:) (szerintem ezzel nem lesz probléma)

Re: Calc-ból Writer sablonban lévő makró meghívása

HozzászólásElküldve: 2014. július 10., csütörtök 12:25
Szerző: Zizi64
Leírom a konkrét szituációt,


Ettől konkrétabban kell leírnod, hogy mit szeretnél, példafájlokkal megtámogatva. A kapott táblázat adatstruktúráját, és a létrehozandó szöveges dokumentumok formátumát is látni kell ahhoz, hogy segíteni tudjak.
(Megjegyzem, ez a kérdés már túlmegy az ingyenes fórumsegítség határain...)

ráadásul az sem lesz baj, ha Win és Linux alatt egyaránt működik.

Akkor az "Excel" és "Word" formátumot, de még az azokra utaló szavakat is felejtsd el. Hatékonyan dolgozni csak az AOO/LO programok natív formátumaival tudsz.


Arra mindenképpen látok lehetőséget, hogy

1.: a makrókat az AOO/LO program Standard könyvtárában tárold, hiszen mind a forrás-, mind pedig a célfájlok - valószínűsítem - makrókód nélküli tartalmúak; illetve azok kell, hogy legyenek. (De persze tárolhatod egy "Mesterfájl"-ban is...)

2.: A kézzel, vagy automatikusan megnyitott, aktív Táblázat-fájlra az Eszköztárra felvett makró-linkkel tudod "ráengedni" a makródat, "Thiscomponent" direktívával megszólítva azt.

3.: A makró futása közben amíg talál nem üres sort az első (egyetlen?) munkalapon, két egymásba ágyazott ciklus kiszedi szép sorjában a sorokból a szükséges információkat, és egy Szövegesdokumentum-sablont nyit meg minden egyes táblázatsor adatai számára, amiket aztán valami sorozatszámmal ellátott fájlnévvel normál ODF dokumentumként elment.

4.: A táblázatból származó adatokat az éppen feldolgozás alatt lévő sablon előre elkészített "Egyéni fájltulajdonság MEZŐ" tárolóhelyeire másolja, amit magában a dokumentumban annyiszor és ott használsz (előre megírva a tartalmat és a formátumot), ahol és ahogy csak akarsz... A látható szövegben ezen Mezők tartalma automatikusan frissül.


Ha ez a módszer megfelel neked, akkor az ötlet ingyen van, dolgozd ki a kódot hozzá; vagy ha gondolod, tudok rá vállalkozni.