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

#1 6. 11. 2018 12:22:25

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Narážel na to někde na portálu neutr.
Z Basicu jdou makra spouštět v pohodě, ale jak se spustí třeba z Writeru, tak nejedou. Předpokládalo se, že to může být chyba Win10.


Mě to začalo blbnout i pod Win7 (Libre 6.1.x), poslal jsem to na bugzillu chyba https://bugs.documentfoundation.org/sho … ?id=121197
Je to tam v ukázkové příloze.


Co jsem zatím vykoumal tak to chybuje když se ve funkci testuje existence předávaného nepovinného parametru oDoc a ten když není předán, tak se něco pokazí

Sub macroBAD(optional oDoc as object)
	if IsMissing(oDoc) then oDoc=thisComponent
	msgbox oDoc.drawpage.getforms().getbyname("Form").getByName("buttonBAD").name 'error after run from document
End Sub

Kód je z ukázkového dokumentu té chyby na bugzille, v dokumentu jsem měl formulář Form s tlačítkem buttonBAD. Když jsem přiřadil makro k tomu tlačítku, hodilo to chybu že pro oDoc nezná drawpage.

Když se to pustí v Basicu, tak vyhodnotí že funkce nemá parametr oDoc a nastaví ho a jede to, ale přes to tlačítko to neprojde.


Bohužel nevím jak to alespoň nějak "ošulit".

Editoval kamlan (8. 11. 2018 20:23:59)

Offline

#2 6. 11. 2018 14:03:14

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

Re: Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Ano dával jsem to jako příspěvek ale v diskusi na stránkách "články". Tehdy jsem si nebyl vůbec jistý jestli je to zapříčiněno z OS, nebo aktualizací LO. Problém byl na stroji mimo mojí dispozici a s jinou konfigurací (W10 architektura 64). Já mám 2 stroje jeden s W7 Poslední Lo 64 bitů a drihý W10 na architektuře 2x86 - také LO poslední verze. Ale poté se mi to objevilo také (asi automatické aktualizace) - nejprve na W10-64 a předevčírem i na W7. Dnes na tom nejsem lépe - musím dělat a nemám čas testovat odkud se to vzalo.


     Jenomže od té doby mi lze spouštět makra přímo z IDE které nechávám otevřené (Basic okno). Nabídky jsou provedeny jako nabídky z hlavního pruhu (nejde o klasická tlačítka ale nabídka za volbou "Nápověda").


     Našel jsem další "problém". Generuji jednoduchý soubor HTML5 s JS a CSS3 - primitivní funkce odkrývání textu při kliknutí na heslo. Plus "mnoho" individuálních testů které odpovídají pomocí dvou modálních oken (Správně nebo Špatně). Zdroje jsou kontrolovány a generovány z Calku přímo do souborů pro nahrání pomocí FTP.
     Problém je v tom, že LO mi nechce vyplivnout textový soubor s formátováním UTF-8, ale jen Windows 1250. Dělal jsem podobné věci s XML a úplně v pohodě. Takže dnes musím uložit jako formátovaný text UTF-8, soubor pak otevřít v PsPadu a skutečně ho přechormátovat na UTF-8 (prostě LO se tváří že ukládá podle volby) ale nesmím přidat koncovku ".html" a i koncovka ".TXT" je chybně formátovaná. Takže vše otevřu a udělám nejprve hromadně úpravy na UTF-8 (PsPad) a potom hromadně přejmenuji na "HTML" (TotalCommander). Je to chvilka práce ale člověka to naštve. Za měsíc odevzdávám práci a 15.12. by to mělo být na webu.


     Normálně jsem "zase" naběhl na neskutečné změny chování LO. Naposledy to byla funkce GeneralFunction.COUNT - půl roku jsem přepisoval knihovny a když jsem skončil byla chyba opravena. Kvůli tomu se problémům jen vyhýbám a neřeším. Samozřejmě tohle dost lidí odradí. Přestávají fungovat věci používané roky ... avšak grafiku ladíme skvěle, ale s tím jděte ..však víte. Otázka zní : LO quo vadis - do MS análu?. Mám dojem že se vrací chování Basicu vyžadující deklarace Option Explicit a že jde o sbližování se typu "podívejte jak LO stají za ...." - zpalťte si kvalitu.

Editoval neutr (6. 11. 2018 14:18:08)


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

Offline

#3 6. 11. 2018 15:22:59

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Takže chování toho mého makra se ukázalo správné, ale při přiřazení k tlačítku do parametru oDoc umístí událost že bylo něco provedeno na tlačítku.
Takže v podmínce jsem musel testovat nejen IsMissing(oDoc) ale taky zda oDoc je ThisComponent. Teď to funguje

Sub macroBAD(optional oDoc as object) 'after click on button the atribute oDoc is com.sun.star.awt.ActionEvent
	if IsMissing(oDoc) OR (NOT (oDoc IS thisComponent)) then oDoc=thisComponent 'correct
	msgbox oDoc.drawpage.getforms().getbyname("Form").getByName("buttonBAD").name
End Sub

Mezitím mi někdo poslal i trochu jiné řešení na bugzillu.

Offline

#4 6. 11. 2018 15:41:31

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Jak máte ten UTF-8 filtr na soubor? Taky takto?

dim soubMozn(2) as new com.sun.star.beans.PropertyValue
	soubMozn(0).Name="Hidden" : soubMozn(0).Value=true 'otevřít na pozadí
	soubMozn(1).Name="FilterName" : soubMozn(1).Value="Text (encoded)" 'txt
	soubMozn(2).Name="FilterOptions" : soubMozn(2).Value="UTF8,LF,Liberation Sans,cs-CZ" 'utf-8


oDocTxt=StarDesktop.loadComponentFromURL("soubor.txt", "_blank", 0, soubMozn()) 'txt s UTF-8

rem zde nějaké ty úpravy souboru

oDocTxt.store() 'uložit
oDocTxt.close(true) 'zavřít

Tohle mi funguje přes 2 roky a UTF-8 texťáky z toho lezou v pohodě, na tom se mi chyba nestala a jede to i na nejnovější verzi. (Win7x64 Libre 6.1.3.2)

Offline

#5 6. 11. 2018 21:00:11

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

Re: Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Já jsem našel řešení zde macro to save file as UTF8 z roku 2017. Celkem se Vám asi bude líbit. Ten text se dá smazat jenom tak že se natáhne za oddělovací čárky nebo dokonce za závorky parametrů volacího makra. Myslím že je to Vaše "parketa" ale autor chtěl ukázat že to umí rozpoznat kódování proto (asi) použil arabštinu:-)



     Navíc z ukázky je zřejmé, že použil skutečně koncovku ".txt", ale já jsem tam dal ".html" a v pohodě lze okamžitě uložit a bez dalších úprav postnout na web. Totéž platí určitě o ".xml". Prostě žádný extra definovaný filtr (LO rozpozná národní sadu) i když tahle vlastnost nebude vždy žádoucí.



Ale děkuji za tipy - otestuji - dnes už toho mám nad hlavu.

Sub testWriting
writeEncodedText("/u/batch/testWritingUtf8.txt", "مصرف البلاد الاسلامي", "UTF-8")
End Sub


Sub writeEncodedText(myPath As String, myText As String, myEncoding As String)
Dim myTextFile As Object, mySf As Object, myFileStream As Object

On Error Goto fileKO

                    mySf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
              myTextFile = createUnoService("com.sun.star.io.TextOutputStream" )
            myFileStream = mySf.openFileWrite(myPath)
myTextFile.OutputStream = myFileStream
     myTextFile.Encoding = myEncoding

myTextFile.writeString(myText & chr(10))

myFileStream.closeOutput : myTextFile.closeOutput

On Error Goto 0
Exit Sub

fileKO:
Resume fileKO2

fileKO2:
On Error Resume Next
msgBox("File write error !", 16)
myFileStream.closeOutput : myTextFile.closeOutput

On Error Goto 0
End Sub

Editoval neutr (7. 11. 2018 05:23:09)


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

Offline

#6 7. 11. 2018 14:03:27

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Makra fungují jen z Basicu ale nikoliv třeba z Writeru [VYŘEŠENO]

Koukám je to to samé co Sébastien C udal i zde https://forum.openoffice.org/en/forum/v … 6&p=412789 odkud mám já to řešení. A rok 2017, tak to jsem se spletl, myslel jsem si že to používám déle :-).


Ta arabština v tom mě ohromně potěšila :-), to jak s ní nakládá Basic když se to snažíte označit je občas tak k na*rání :-)!


Jestli si někdo myslíte že umíte s myší potažmo tadžpedem, tak si zkuste v Basic editoru označit ten arabský text -> tomu co se při tom děje říkám kvantové minianimace - najednou "skok" a všechno je poněkud jinak :-). Pro mimořádně trpělivé a mě-to-přeci-nerozhodí jedince se v tom můžete zkusit pohybovat šipkami a ještě si vyzkoušet klávesy Del a Bksp, doporučuji hned někde u těch uvozovek :-).

Jen tak pro zajímavost, nejvíc mě zatím Basic editor vypekl, když jsem postupně mazal arabský text v uvozovkách i s uvozovkami a zůstala tam myslím samohláska ale uvozovky označující řetězec už ne - on samohlásku už nevykreslil a začalo to hlásit chyby, páč na řádku prostě byl neviditelný cizí znak. Hodně jsem byl tenkrát vytočen, než jsem na to přišel že tam byl z mně neznámého důvodu nevykreslený znak :-).

Offline

Zápatí