Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 20. 3. 2013 17:38:45

pancha
Člen
Registrace: 20. 5. 2012
Příspěvků: 7

Relativní odkaz na soubor v makru - VYŘEŠENO!

Zdravím, mám vytvořené makro, kterým si automaticky plním soubor .odt z jiných .txt souborů (01.txt,02.txt...). Chci se zeptat jestli jde cesta k souboru (file:///D:/Slozka/podslozka/01.txt) zapsat nějak relativně (../01.txt).

sub Main
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Name"
args2(0).Value = "file:///D:/Slozka/podslozka/01.txt"
args2(1).Name = "Filter"
args2(1).Value = "Text (encoded)"
dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2())
end sub

Díky.

Editoval pancha (22. 3. 2013 08:21:57)

Offline

#2 20. 3. 2013 18:02:17

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,956

Re: Relativní odkaz na soubor v makru - VYŘEŠENO!

To bych vůbec nedoporučoval. Stačí málá změna OOo (nový build) a vše je v háji. Dokonce myslám, že to ani nejde (nevím jak LO).

Jde asi o to, rychle nalistovat soubory pro import dat. Já jsem něco podobného kdysi dělal za pomoci externího programu, který mi vypsal obsahy adresářů jako plnou adresu. To jsem pak převedl na textovou a z ní jsem pak adresáře linkoval (tedy v Calcu, ale to by mělo být stejné). Bohužel už si nepamatuju ten program, ale když zadáte například na Slunečnici.cz (i jiné servery) heslo "výpis adresáře" - tak něco vhodného najdete.
  Do makra potom za adresu iterujete ten vytvořený seznam a následně například prohledáváte text ap.


Tedy nevím, jestli je to zrovna to co potřebujete.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 20. 3. 2013 19:03:09

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Relativní odkaz na soubor v makru - VYŘEŠENO!

Makrem zcela relativní adresu souboru nastavíte pouze vždy jejím přímým zadáním. Lze pro tento účel vytvořit dialog, který vrací URL jako text, který je předán do makra.


Pro případ, že jsou cílový a zdrojové soubory v té samé složce už něco dělat lze. Můžete například použít funkci CurDir, která vrací adresu souboru tam kde je aktuálně uložen. Pak už stačí pouze přidat lomítko a název souboru k otevření.

curDir(thisComponent.url)+getpathseparator+"01.txt"

Jak jsem psal, podmínkou je že zdroj i cíl se nachází v té samé složce.
Cur Dir zjistí adresu (např.:file:///D:/Slozka/podslozka)
getPathSeparator přidá oddělovač podle OS
Tento zápis můžete vložit do makra.


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#4 20. 3. 2013 21:55:19

pancha
Člen
Registrace: 20. 5. 2012
Příspěvků: 7

Re: Relativní odkaz na soubor v makru - VYŘEŠENO!

sedlacekdan: Cílový a zdrojové soubory jsou ve stejné složce, takže by mělo asi fungovat tebou navrhované řešení. Můžeš mi to prosím ukázat na tom mém vzorovém příkladu. Makro jsem si vytvořil pomocí funkce Zaznamenat makro, a tomu jazyku moc nerozumím. Díky.

Offline

#5 21. 3. 2013 14:47:14

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Relativní odkaz na soubor v makru - VYŘEŠENO!

Omlouvám se za omyl, funkce CurDir zjistí kořenovou složku. Použijeme funkci Dir

sub Main
dim document   as object
dim dispatcher as object
' zjistíme aktuální adresu dokumentu
adresa = thisComponent.url
' odstraníme název původního souboru a nahradíme ho názvem txt souboru
' odečteme počet znaků názvu souboru - len(dir(adresa)) 
' počtu znaků celé adresy - len(adresa)
' nakonec přidáme název souboru - + 01.txt
adresa_souboru_txt = left(adresa, len(adresa)-len(dir(adresa))) + "01.txt"
' ostatní se nemění
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Name"
args2(0).Value = adresa_souboru_txt
args2(1).Name = "Filter"
args2(1).Value = "Text (encoded)"
dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2())
end sub

;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 22. 3. 2013 08:21:12

pancha
Člen
Registrace: 20. 5. 2012
Příspěvků: 7

Re: Relativní odkaz na soubor v makru - VYŘEŠENO!

2sedlacekdan: Fakt moc dík, už to funguje jak má :-)

Offline

Zápatí