Programovanie makier v LibreOffice: Funkcia ChDir()

LO.png Chcete zmeniť aktuálny priečinok na iný? V Linuxe nato slúži príkaz cd , ale v makrách sa využíva funkcia ChDir() , resp. využívala. Čo je na tom pravdy, že funkcia ChDir() už nefunguje? Otestujeme túto funkciu zblízka a tiež sa pozrieme aj na funkčnosť funkcie CurDir() , ktorá síce funguje v základnej aplikácii, ale má tiež svoju Achillovu pätu.    

Zmena aktuálneho adresára

Určite ste sa stretli so situáciou, že chcete počas priebehu vykonávania makra zmeniť aktuálny adresár na iný, aby ste tak mohli tam pokračovať s nejakými operáciami. Na tento účel slúži funkcia ChDir(). Jej argumentom je cesta k priečinku.

Sub changeDir

Dim nextPath As String

Dim message As String

message = "Aktuálny adresár: " & CurDir()

nextPath = "C:\Users\astro\Desktop\makra"

MkDir(nextPath)

ChDir(nextPath)

MsgBox message & Chr(10) & "Aktuálny adresár: " & CurDir()

End Sub

Spustenie makra vo Windows 10 Spustenie makra vo Windows 10

Zdá sa, že avizovaná zmena priečinku nenastala. Skúsme aplikovať rovnaký kód s jednou menšou obmenou v Linuxe. Ak aj tam dostaneme rovnaký výsledok, tak problém je multiplatformový.

Sub changeDir

Dim nextPath As String

Dim message As String

message = "Aktuálny adresár: " & CurDir()

nextPath = "/home/astronomer/Plocha/makra"

MkDir(nextPath)

ChDir(nextPath)

MsgBox message & Chr(10) & "Aktuálny adresár: " & CurDir()

End Sub

Spustenie makra v Linux Ubuntu 18.04 LTS Spustenie makra v Linux Ubuntu 18.04 LTS

Ani spustenie makra v Linuxe sa priečinok nezmenil. Rovnako poznámka v znení: „Tento příkaz momentálně nefunguje podle dokumentace. Více informací najdete v popisu této chyby“ k funkcii nám napovedá, že niečo s touto funkciou nie je v poriadku. A ako vidieť z nahlásenia chyby vzťahujúcej k funkcii ChDir(), je to už pekne dlho neopravená funkcionalita. Môžeme len dúfať, že v jednej z nasledujúcich verzií LibreOffice sa opraví tento nepekný bug inak zaujímavej funkcie.

V prípade, ak by opravili túto funkciu hneď v nasledujúcej verzii alebo až o pár rokov, tak znova si prejdite článok a postup aplikácie ChDir() by mal platiť. Ak by sa niečo zmenilo, napíšte dole pod komentárom.

A čo funkcia CurDir()?

Ak sa pozrieme na popis funkcie CurDir() v help.libreoffice.org, má rovnakú poznámku o možnej chybovosti ako funkcia ChDir() a dokonca vedie na rovnakú stránku Bugzilly. Skutočne však nefunguje ako ChDir()? Poďme to otestovať našimi záťažovými testami. Majme nasledovné makro:

Sub actualDir

MsgBox "Aktuálny adresár: " & CurDir()

End Sub

Už vieme, že zobrazí aktuálnu nastavenú adresu. V minulom článku sme ale nespomenuli, že funkcia CurDir() má jeden argument. Označujeme nim vybranú jednotku, napr. "C" označujúci primárnu jednotku vo Windows. Nasleduje makro, kde aplikujeme argument drive vo funkcii CurDir().

Sub actualDir

MsgBox "Aktuálny adresár: " & CurDir("D")

End Sub

Aplikácia funkcie CurDir() aj s argumentom drive Aplikácia funkcie CurDir() aj s argumentom drive

Pod jednotkou D mám externý pevný disk. Zdá sa, že funkcia CurDir() funguje, ak dáme správne jednotku. Čo sa ale stane, ak dáme neexistujúcu jednotku? Podľa dokumentácie by mala funkcia poslať chybový kód 68 a tým pádom spustenie obvyklej chybovej hlášky, lenže čo sa nestane po spustení nasledujúceho makra.

Sub actualDir

MsgBox "Aktuálny adresár: " & CurDir("E")

End Sub

Po spustení makra s neexistujúcou jednotkou spadne celý LibreOffice! Takže neodporúčam takto experimentovať, ako som to urobil ja. A keď, tak na vlastné riziko. Tiež si môžete pozrieť moju chybovú správu pre vývojárov LibreOffice. Dúfam, že to čoskoro vyriešia. Tiež by som bol vďačný, ak by ste i vy tieto reporty posielali. Ale opäť prízvukujem, že na vlastné riziko. Mne spadlo celé LibreOffice bez nejakej väčšej straty a obnova otvorených dokumentov bola bezproblémová. Otázkou je, či sa vždy tak „mierumilovne“ táto chyba správa a nemôže u niektorých užívateľov viac uškodiť. 

Verdikt

Na záver pár slov k predstaveným funkciám. Funkcia ChDir() nefunguje vôbec, aj keď je to veľmi užitočná funkcia pri práci s priečinkami. V príkazovom riadku v Linuxe je táto funkcia ekvivalentná s príkazom cd. Čo sa týka funkcie CurDir(), tá síce funguje, ale ak napíšete zle jednotku, tak vám spadne celý LibreOffice. Takže ak si moc programátorský neveríte, tak sa tejto funkcii oblúkom vyhnite.

Ak tieto dve funkcie opravia, v čom ja dúfam, tak sa vráťte k článku a pozrite si znova ich aplikácie a k tomu aj môj komentár. Dovtedy bohužiaľ treba využiť niečo iné. Ak máte alternatívu k týmto dvom funkciám, tak podeľte sa s nimi v komentároch. Jednou z možných alternatív sa nachádza v komentári od používateľa neutr pod predchádzajúcim mojim článkom. V budúcom článku môžeme skúsiť jeho riešenie a zhodnotíme, či to stojí zato.

Námet na tento článok poslúžili tieto zdroje:

OpenOffice.org Macros Explained Third Edition, Andrew Pitonyak, page 168-169, dostupné online

Funkce ChDir, help.libreoffice.org, dostupné online

Funkce CurDir, help.libreoffice.org, dostupné online



(Jako ve škole)
 

Komentáře

user avatar r
Odpovědět
Programovanie makier v LibreOffice: Funkcia ChDir()
1. 12. 2019, 19:34:25
k pádu při funkci jsem zadal bug: https://bugs.documentfoundation.org/show_bug.cgi?id=129136
Poslání chybové automatické zprávy nestačí, je třeba zadat bug a popsat kroky k reprodukci chyby.
user avatar Eduard Boldižár
Odpovědět
Re:Programovanie makier v LibreOffice: Funkcia ChDir()
1. 12. 2019, 20:45:38
Jaj tak, to som netušil, že ešte tam to treba. Vidím, že ste to za mňa nahlásili a ďakujem za Váš čas.
user avatar r
Odpovědět
Re:Re:Programovanie makier v LibreOffice: Funkcia ChDir()
6. 12. 2019, 15:24:40
Dobrý den, chyba je opravená.
user avatar Eduard Boldižár
Odpovědět
Re:Re:Re:Programovanie makier v LibreOffice: Funkcia ChDir()
7. 12. 2019, 17:17:40
Som potešený, že môj článok dopomohol k vyriešeniu bugu. Ďakujem ešte raz za spoluprácu.
Snáď časom opravia aj funkciu ChDir().
user avatar r
Odpovědět
Re:Re:Re:Re:Programovanie makier v LibreOffice: Funkcia ChDir()
7. 12. 2019, 22:25:52
Tady si nejsem moc jistý, viz comment 3: https://bugs.documentfoundation.org/show_bug.cgi?id=129114
user avatar Eduard Boldižár
Odpovědět
Re:Re:Re:Re:Re:Programovanie makier v LibreOffice: Funkcia ChDir()
8. 12. 2019, 16:23:15
To by bola škoda, ak by sa s tým nedalo nič robiť kvôli obmedzeniam zvolenej architektúry. No uvidíme, ako to dopadne.

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz