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

#1 18. 3. 2017 14:45:29

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

Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Jak použít fci getCharacterDirection()? http://api.libreoffice.org//docs/idl/re … 35598df144


Sub smer
    Dim s as string, i as long
    s="abc"
    i="1"
    msgbox com.sun.star.i18n.XCharacterClassification.getCharacterDirection(s,i) 'nefunguje
End Sub


Bohužel nejsem schopen to implementovat do správného Basic kódu, aby to vypsalo, že na pozici i řetězce s je směr znaku ... Hodnoty co má vypisovat jsou na  http://api.libreoffice.org//docs/idl/re … c70daacd8b

Editoval kamlan (19. 7. 2017 18:44:25)

Offline

#2 18. 3. 2017 19:56:45

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Ta implementace je jistě mnohem složitější. Ukázka podobného výpisu :

Sub oWriterStyle
  	Dim oDoc
  	Dim oText
  	Dim oCur
  	Dim oObj
  	Dim Dummy()
  		On Error Goto oBad
  		'otevře nový Writer a načte styly
		oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Dummy())
		'Get the StyleFamilies
			Dim oFamilies
			Dim oFamilyNames
			Dim oStyleName
				oFamilies = oDoc.StyleFamilies
				oFamilyNames = oFamilies.getElementNames()
				oStyleName = oFamilies.getByName("CharacterStyles") 
				oSElementName = oStyleName.ElementNames
				oDisp = ""
			'Get the Style Name
				for i = LBound(oSElementName) to UBound(oSElementName)
					oDisp = oDisp & i & ")" & oSElementName(i)
					oDisp = oDisp & Chr$(10)
				next i
				'Cyklus For i Next i je typem enumarace "i"
				'Někdy to bývá také v cyklu While..Wend
			msgbox(oDisp, 0, "Style Name")
		Exit Sub
	oBad:
		Dim oErLine As Integer
		Dim oErNum As Integer
		Dim oErMsg As String
			oErLine = Erl
			oErNum = Err
			oErMsg = Error
		Msgbox("Error Line No. " & Chr$(9) & " : " & oErLine & Chr$(10) _
			& "Error Number " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
			& "Error Message" & Chr$(9) & " : " & oErMsg , 0, "Error Message")
End Sub

     Spusťte si to a uvidíte to co je přístup k parametrům - zde jen stylů. To 'i' je pozice iterátoru a "s" bude spíš odkaz na dokument, tedy odstavec(paragraph), větu (sentence) a podobně.


     Mně se to také nepovedlo spustit i když s implementací podle návodů v api, nebo například v modulech OOo jako je hvězda ap. nemám větší problémy. Vždy ale nejprve hledám jestli to už někdo neřešil. A k tomuto je docela dost řešení - v Javě ale v Basicu nic.
     Problém je v tom, že to bude asi jen pod službou UNO service která se musí spustit a pak se musí deklarovat proměnná a volat na ni Uno sekvenci. Bude to nejspíš nějak takto :

sc = sc & getTextConversion("com.sun.star.i18n.XTextConversion").getCharacterDirection(s,i) + Chr(13)
'nebo opačně - v každém případě hodně podobně
sc = sc & getCharacterDirection("com.sun.star.i18n.XTextConversion").getTextConversion(s,i) + Chr(13)

Editoval neutr (18. 3. 2017 19:58:26)


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 19. 3. 2017 10:31:03

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Popravdě nechápu, jak něco z vašeho prvního příkladu implementovat na něco z toho i18n, byť ty styly to vypisuje skutečně pěkně.
Z druhého příkladu jsem nebyl schopen vystihnout téměř nic.
Já usilovně hledal nějaký příklad v Basicu ale též jsem nic nenašel a nedělám si iluze, že bych byl nějaký příklad z Javy, C++ atd. převést do LibreBasicu, skutečně nejsem kdovíjaký ajťák a ten LibreBasic je s tím množstvím metod a množstvím čehosi všehosi na mě tak složitý, že jsem schopen něco udělat skutečně jen dle konkrétních příkladů.


Ještě jsem to zkusil přes Listener, byť je to asi blbost, ale jedině tak mi to vypsalo alespoň metody z i18n.XCharacterClassification.


global oListener as object
sub pokus
    Dim s as string, i as long, udaj
    i=1
    s="abc"
    's="زوثذكزئ" 'zkusmo něco z AR
  's="123456" 'pro čísla by to asi též mělo vypsat něco jiného
    oListener = CreateUnoListener("prefix_", "com.sun.star.i18n.XCharacterClassification")
    msgbox oListener.Dbg_methods 'jediný pokrok, alespoň vypíše metody z XCharacterClassification
    udaj=oListener.getCharacterDirection(s,i) 'nefachá, ale alespoň to nevypíše nějaké chybové hlášení
    msgbox udaj 'vypisuje vždy jen nulu
end sub


sub prefix_getCharacterDirection(s as string, i as integer) as integer 'obsluha události listeneru
    prefix_getCharacterDirection=oListener.getCharacterDirection(s,i) 'zde beztak vrací vždy jen nulu
end sub

Offline

#4 19. 3. 2017 12:01:15

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Ano já souhlasím. Ony ty nové metody jsou sice implementované ve formě Java zdrojáku ale nikdo asi nerozchodil patřičnou službu pro UNO ačkoliv pokud to existuje měl by se kód najít tak jak to hledáte. Ono to právě chodí zřejmě na starou knihovnu, ale to se domnívám jen proto, že vlastnosti lze volat stejně jako před několika roky. Také nevím co je to "nová" verze - už může být nová hodně dlouho.


     Najít správnou syntaxi pro UNO je docela horor ale dá se přibližně dohledat podle podobných volání a služeb. Je na to jistě i návod - nějaké developGuide. Viděl jsem i nějaký návod ve Writer pro volání služeb Calcu ale ve verzi OOo.2.2.
     Vím oč Vám jde. Potřebujete detekovat arabskou znakovou sadu a možná i styl písma před tím nežli to otevřete. Možná máte potřebu konvertovat mezi různými arabštinami.
     Popravdě mně se do toho nechce. Je to jistě na mnoho hodin. Sám finišuji - testuji rozšíření a stále něco dodělávám a tak ani nemohu odpovědím dát všechno co bych asi mohl. Ono se to táhne do minulosti - já se UNO vyhýbám jak to jen jde. Jsou ale věci bez kterých to asi bez UNO nejde - což si myslím právě o tomhle případu. Takže mimo toho o UNO vím moc málo - jen nejnezbytnější.


     Dám Vám ale tip. Vzory maker Japonsko. Je to většinou vidět a tam kde jsou klikyháky můžete použít google překladač.
     Já používám rozšíření pro Firefox a jeho ikona je "T". Vyberete řádek a dáte přeložit výběr. Výběr se počeští přímo ve stránce. Takto zkopírujete přeložené klikyháky a dáte makro do Writer kde to otestujete.
     Je to nejlepší zdroj maer jaké na netu jsou - co víc používá často makra která pracují s asijskými znaky mezi které arabština také patří. Často je tam vidět sekvence pro asijské literály což je asi nutné aby šlo konvertovat do angličtiny. Musíte ale prohledat dobře HomePage abyste věděl odkud se správně naklikat. Ten odkaz je přímo na Writer ale je tam ode všehu alespoň něco.


     Přeložíte tím "T" jen několik vět a musíte dát pozor na formátované texty zejména klikačky nebo barvu textu - dá se to přečíst ale mne to rozčiluje. Když dáte větší odstaveček tak to "T" neschroupe. Je to ale nejlepší způsob jak si upravit stránku v cizím jazyku a nakopírovat si to kam potřebujete. Ty překlady celých stránek nestojí za nic když přeloží třeba slova která jsou pro Basic vyhrazená ap,


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

#5 19. 3. 2017 14:24:58

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Kdysi jsem na tu japonskou stránku již narazil, ale ta svébytná kombinace japonských znaků a latinky mě docela odrovnávala náladu se v tom prohrabávat.


Myslel jsem, že když se mi podaří zjistit směr textu pro nějaký znak, tak se konečně dohrabu ke spolehlivému makru, které by eliminovalo to, že v CTL textu systém prohazuje Del a Bksp, takže při stisku Del se v arabském nápise smaže znak vlevo od kurzoru a při Bksp vpravo -> ono nějaké AR znaky též mají směr textu zleva doprava jako latinka; AR písmo je komplet zprava doleva, ale různé jiné znaky jsou i zleva doprava -> a na to jsem si nezvykl ani po několika měsících práce, takže hodněkrát při stisku Del/Bksp následuje Ctrl+Z a druhý pokus ... nehledě na to, když jsou tam různá odřádkování, tabulátory apod. :-).


Ještě zmiňujete "nežli to otevřete" -> já myslel, že to jde pro aktuální dokument a text v aktuálním otevřeném dokumentu -> ale pak-li je to jen pro neotevřené dokumenty, tak se ani nemusím dál snažit :-).

Offline

#6 19. 3. 2017 14:49:38

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Ano jde to pro aktuální dokument, ale já jsem myslel že budete pracovat v podstatě v překladovém módu - z jedno dokumentu do druhého. Načítají se sekce a není nutné mít ten kopírovaný (překládaný) dokument otevřený.
     Mohu Vám doporučit rozšíření Translate table v.0,4.  Web Translate table. Je sice staršího data ale testoval jsem to asi před měsícem. Musíte se s tím nejprve seznámit abyste věděl jak to pracuje. Jednoduše vyberete odtavec a vytvoříte pro něj „Translate Table" pomocí ikony - a dáte přeložit z Google. Ja tam více možností volby překladače. Já jsem zvyklý překládat rekurzivně dokola dokud se nevrací smysluplný text překladu. To by šlo v tomto rozšíření také, ale já už jsem zvyklý na svůj systém.


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

#7 19. 3. 2017 16:25:25

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Tak to mně ani nenapadlo, že bych mohl pracovat se zavřeným dokumentem a vyhnout se prvotnímu Ctrl+C a Ctrl+V :-).


Po necelém roce s arabštinou jsem samozřejmě zjistil, že do překladů arabštiny mám zatím skutečně daleko :-), takže nyní mi jde "jen" o čistou automatickou transliteraci, prostě pustit makro aby se to přetransliterovalo samo. S tím zjišťováním toho směru textu mi šlo primárně o ten Del/Bksp, to když to různě dodělávám a opravuji chyby :-).

Ono ani to transliterování není tak jednoduché -> v arabském zápisu je totiž relativně dost písmen, které se ve větě vůbec nevyslovují, avšak vyslovovaly by se třeba, kdyby se to říkalo jen jako jednotlivá slova a nikoliv souvislá věta :-). Ale kdyby se zapsalo jen to, co se vyslovuje, tak dostat z toho zpětně jednotlivá slova je mnohdy nemožné -> při vyslovování se třeba různá slova spojují "do-jednoho-dlouhého" a to se pak mění koncovky nebo začátky u těch spojených slov, jsou tam různé změny hlásek při určitých kombinacích hlásek na jiné atd., takže pokud chci automatickou transliteraci i s barevným výstupem pro nějakou specifickou výslovnost + přepsání jen toho, co se skutečně vyslovuje a spojeno dohromady tak, jak se to vyslovuje, je to dost složité. A samozřejmě žádná oficiální a používaná transliterace tohle nedělá, prostě se přepisuje i to, co se nevyslovuje a človíčku co se to jako samouk učíš, poraď si :-). Takže na to jdu vlastním způsobem transliterace tak, jak mi to vyhovuje a jak je pro mě snažší se učit :-).
Když jsme tedy téma rozebrali docela dopodrobna, tak zde je malá ukázka té transliterace :-), stačí pustit makro malaUkazka v novém dokumentu.


sub malaUkazka
    dim napis, s as string, oDoc, oVC as object
    napis="كَمِلَّنْدَ" 'kamillanda
    oDoc=thisComponent
    oDoc=thisComponent:oText=oDoc.Text
    oVC=oDoc.CurrentController.getViewCursor
    vloz(napis+" ", -1)
    oVC.gotoStart(false) 'na začátek dokumentu
    Do
        oVC.goRight(1,true) 'označí 1 písmeno
        oVCEnd=oText.createTextCursorByRange(oVC.End) 'konec kurzoru
        If oVCEnd.isEndOfParagraph() Then Exit Do 'kurzor je na konci odstavce tak skončí
        s=oVC.getString() 'aktuální znak
        If s="ك" then
            vloz("k",-1)
        elseif s="َ" then
            vloz("a",-1)
        elseif s="م" then
            vloz("m",RGB(134,45,167))
        elseif s="ِ" then
            vloz("i",-1)
        elseif s="ل" then
            vloz("l",-1)
        elseif s="ن" then
            vloz("N",RGB(112,234,28))
        elseif s="د" then
            vloz("d",-1)
        elseif s="ّ" then 'šada
            oVC.gotoEnd(false)
            oVC.goLeft(1,true)
            oVC.CharUnderline=com.sun.star.awt.FontUnderline.DOUBLE
            oVC.CharUnderlineHasColor=true
            oVC.CharUnderlineColor=RGB(234,31,2)
            oVC.gotoEnd(false)
            oVC.CharUnderlineHasColor=false
            oVC.CharUnderline=com.sun.star.awt.FontUnderline.NONE
        End If
        oVC.gotoRange(oVCEnd,false) 'na původní pozici virtuálního kurzoru
    Loop While true
    oVC.gotoStart(false) 'na začátek dokumentu
end sub

function vloz(s as string, barva) 'vloží znak s na konec dokumentu; je-li barva tak ho ztuční a obarví
    dim oVC, oText, oVCAkt as object
    oVC=ThisComponent.getCurrentController().getViewCursor()
    oText=ThisComponent.getText()
    oVCAkt=oText.createTextCursorByRange(oVC.getStart())
    oVCAkt.gotoEnd(false) 'na konec dokumentu
    if barva<>-1 then
        oVCAkt.charColor=barva
        if barva<>0 then oVCAkt.CharWeight=com.sun.star.awt.FontWeight.BOLD 'černé netuční
    else
        oVCAkt.CharWeight=com.sun.star.awt.FontWeight.NORMAL
        oVCAkt.charColor=-1
    end if
    oText.insertString(oVCAkt.getStart(),s,true)
    oVCAkt.CharWeight=com.sun.star.awt.FontWeight.NORMAL
    oVCAkt.charColor=-1
end function

Offline

#8 19. 3. 2017 18:42:01

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

To je hezké ale složité. Jestli můžu poradit tak to jde natažením kurzoru na arabský text. Pomocí dvou array vybírat ve správném směru arabské znaky a znak po znaku naskládat do latinky ve směru jak je potřeba.
     K tomu stačí možná iterovat buď latinku nebo arabský zdroj opačně - v každém případě by šlo místo složitého IF použít Select Case, nebo Choose. Šlo by zřejmě vytvořit databázi (stačí možná CSV) a překládat nejen znak po znaku ale celá slova nebo fráze.


     V každém případě by to šlo pomocí Unicode napárovat. Když se příhlásíte do Googlu tak máte k dispozici dostávat například překlady emailem, Z toho pak vybudovat svou vlastní databázi. Oni naráz pracují jenom asi 5000 znaků takže dlouhé dokumenty musíte rozsekat, Já mám sešit který obsah rozseká na soubory jednotlivých listů (max 2 normostrany). Tedy já to posílám jako prostý text ale je možný tz. kódovaný txt, RTF a myslím také Word a určitě ještě další.


     Vy jste šikovný takže si snadno poradíte nejlépe pomocí Calcu. Nevím kolik existuje arabských znaků ale lze udělat specializovanou knihovnu a může mít až 1024 modulů.
     Jednoduše stačí znak po znaku zadat AR do Calcu třeba ve sloupci A. Do sloupce B zadáte převod pomocí UNICODE A UNICHAR. V Basicu tohle nejde. Je tam jen Chr a ASC ale dají se naportovat funkce sešitu - prakticky jen kvůli češtině - obecně národní sady.
     Seznamy vytvoříte přímo v Calcu, zkopírujete je do Basicu a je hotovo - ale samo sebou to musíte trošku znát. Takže přímo jen znakovou konverzi můžete mít rovnou v Basicu. Na překlady slov a frází by to nebylo. To by musely být externí soubory ale může to být v klasické databázi nebo možná šikovnější přímo v Calcu který se otevírá jako skrytý.


     Tedy nedosáhlo by se asi odezvy srovnatelné se slovníky které jsou v instalaci, ale šlo by asi udělat snadno i filtr pro XML. Základem by byly asi Googlovské překlady ale šlo by se dostat i ke skloňování, stupňování, frázování a podobným věcem - nevím jestli se to pro CTL také tak nazývá.


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

#9 20. 3. 2017 15:36:00

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Při programovém procházení si se směrem AR textu není třeba lámat hlavu, třeba goRight jde prostě na další znak, goLeft na předchozí a je mu jedno, jestli je směr textu zleva doprava či opačně. Něco trochu jiného je to na klávesnici když mačkáte šipky vpravo/vlevo a pro CTL se vám pro šipku vpravo posune kurzor doleva a pro šipku vlevo doprava :-). Ale v Libre v Nástroje -> Možnosti -> Jazyková nastavení - Ovládání kurzoru se dá zvolit i Vizuální a pak se i v CTL textu na šipku vpravo posune kurzor doprava a ne opačně systémem jdi na další/předchozí. Ale nefunguje to pro Del&Bksp a jelikož jsem si na to nezvykl ani po pár měsících, tak jsem se snažil to pro Del/Bksp nějak spolehlivě naimplementovat, ale prostě narážím na nedokonalosti v detekci :-), byť pro prostý AR text mi mé Del/Bksp makro celkem funguje, ale pere se mi to na začátcích/koncích řádků a místech, kde je CTL smícháno s latinkou a nechce se mi to obsáhle podmínkovat, když ne všechny AR znaky mají směr textu zprava doleva :-).


Já použil to If elseif záměrně, neboť mám v nějaké podmínce i mnohdy vícero OR a AND, což bych v Select Case nemohl.


S arabštinou je problém s tím, že jeden AR znak má občas vícero významů, takže přímá znaková konverze nemusí být vůbec správná. Např. dlouhé samohlásky "í" nebo "ú" -> "í" je ve skutečnosti zapsáno jako dva znaky "ij" a "ú" je zapsáno jako dva znaky "uw" -> a nejlepší na tom je to, že někdy "ij" znamená jednotlivé "i" a "j" a nikoliv "í" -> a programově se to nepozná, pořád jsou zapsány dva znaky "ij" a jestli je to "ij" nebo "í" někdy vychází třeba dle tvaru jiného slova, ale někdy se to prostě nemusí poznat a v úvahu připadají oba významy, s tím, že ale první může být třeba přídavné jméno a druhý třeba sloveso nebo se třeba vázat až na další slovo, takže pokud si to nevysvětlíte s autorem textu, může být i dost radikální rozdíl v těch možnostech, nehledě na to, když jsou texty tzv. "nevokalizované" a nejsou v nich zapsané krátké samohlásky (což je nejjednodušší a nejčastější způsob zápisu), to pak třeba dlouhé "í" je zapsáno jako "j" a pokud to slovo a arabská pravidla gramatiky vyloženě neznáte, tak nepoznáte zda jde o "í" nebo "j" a i tak to občas může mít oba významy :-). V české latince je jedno, zda slovo znáte nebo ne, prostě čtete písmeno po písmenu, špatné už je to třeba s angličtinou, kde pro správnou výslovnost musíte slovo znát, a pro arabský text musíte znát i potřebná gramatická pravidla, a že těch je skutečně dost :-).
Ještě je i perlička, že ne všechny AR písemné znaky jsou na klávesnici, takže občas kdybyste chtěl mít AR text čistě spisovně, tak vás vyfakuje i Google translator, protože slova s vloženým čistě spisovným znakem vůbec nebude znát, to pak musíte něco nahradit za lidovou formu a pak to někdy jde a někdy stejně ne :-).


Pak je ještě problém s tím mým obarvováním určitých písmen a tím obarveným podtrháváním -> pro obé mám víc variant barev, takže někdy třeba "m" bude mít jednu barvu a někdy jinou a někdy bude neobarvené, v závislosti na okolních písmenech. Jako kdyby bylo třeba zapsané arabsky "kamil" a já v závislosti třeba na koncovkách okolních slov jednou potřeboval dostat "kamil" s červeným "m", jindy s modrým "m" a jindy s podtrženým "m" :-).


Ale inspiroval jste mně s Calcem, takže zkusím vytvořit si ty AR údaje v jednom sloupci a české všelijak částečně barevné údaje ve druhém a pak pustím nahrazování. Pokud se mi to povede, tak mi to práci skutečně  obrovsky zjednoduší než neustále připisovat další a další If elseif, to máte naprostou pravdu; a implementovat do Basicu proměnlivé částečně barevné nahrazování, to bych se jistě množství If Elseif nevyhnul :-). A ještě je výhoda jak jste mi psal načítat to ze zavřeného dokumentu, načtu si arabštinu a pustím nahrazování rovnou na načtený AR text, takže než naimplementuji všechna pravidla, tak dostanu směs latinky a AR a alespoň pěkně uvidím, co dalšího ještě musím zapracovat :-).

Offline

#10 20. 3. 2017 16:30:45

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Když budete pracovat v Calcu tak se vám hodí funkce BarvaPozadi. Dá se volat jak makrem tak zejména v sešitě =BARVAPOZADI(). Musíte stát vpravo od obarvené buňky. Funkce testuje nejen pozadí ale i barvu písma takže si navolíte barvy podle nabídky sešitu a a pak si přečtete jaké mají barvy číslo. Podle toho nadefinujete svoje barvy jako proměnné - například MyCol(i), nebo zkratkou MyCol(M1). Dáte to do selectu nebo Choose a voláte jen funkci.
     

Function BarvaPozadi 'Vypíše číslo barvy pozadí buňky vlevo
 oCell = ThisComponent.CurrentController.getSelection() 
With oCell.RangeAddress 
SH = .Sheet 
SC = .StartColumn 
SR = .StartRow
End With 
oSheet = ThisComponent.Sheets(SH) 
oCell = oSheet.GetCellbyPosition(SC+i-1, SR)
barva = oCell.CellBackColor
pismo = oCell.CharColor
BarvaPozadi = "Číslo barvy pozadi = " & barva & " Číslo barvy písma = " & pismo
End Function

      Ještě o funkci BARVAPOZADI. Musí být v lokálním sešitě a reději ji spouštějte jen jednou a hned to zkopírujte a vložte jen jako test. Zlobí to při otevírání a stalo se že v některé verzi se v různých buňkách vyskytly stejné výsledky.
      Ono to funguje normálně i pro 50 buněk, ale nesmíte přerušit sezení. Já to užívám dost často - mám to jako vzor v MojeMakraStandard a kopíruju  to do sešitu ve kterém to potřebuji a hned ji pak zase smažu. Takže hlavně výsledky hned zkopírujte a původní obsah smažte.
      Makro pak aplikujte ve Writer. Mohl bych udělat i čtení property ve Writer - když by bylo potřeba načítat barvy font ap. z Writer - ale Vaším záměrem není číst barevné texty - jen je zapisovat.


      To ostatní co uvádíte je zajímavé ale Do Selectu můžete přidat podmínku IF nebo vnořený select. Existuje také makro pro PopUp okénko které se podobá funkcí například ListBoxu. Takže když tam bude vícesmyslný význam můžete místo přímé editace otevřít a vybrat PopUp(em) správnou variantu.


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

#11 20. 3. 2017 16:49:58

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Ještě mne napadlo, že místo funkce MyCol můžete udělat MyStyle a namíchat všechny styly které používáte pro Váš text - nejen barvu. Tedy také Tučné, kurzívu, podtržené. Dokonce jsem viděl několik specialit jako je několik druhů podtržení a nadtržení (tečkovaně, dvojité slabé tenké a různou barvou). Také by šlo změnit font - ale nevím jak by to bylo ve smyslu fontu stabilní po uzavření dokumentu.


     Také by šla udělat dodatečné oprava stylu jako makro (funkce) která by přepsala styl při manuálním výběru. Spouštění nejlépe klávesovou zkratkou.


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

#12 20. 3. 2017 19:09:37

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Spíš na to půjdu přes Writer, neboť v tom umím mnohem lépe, s Calcem se programovat budu teprve učit :-). Ale načetl bych si arabský text do Writeru a jen bych z Calcu z jednoho sloupce bral vzory pro Najít: a z druhého sloupce již barevně a podtrženě upravené vzory čím nahrazovat nalezené.
Zjednodušeně např:. bych načetl text "123456" a v Calcu budu mít v A1 "123" a v B1 "abc" s barevným "b", a v C1 "abc" třeba s podtrženým "c", takže při výskytu "123" bych dle potřeby z B1 nebo C1 vzal rovnou celý zformátovaný text a vložil jej místo "123".


V Select jsem vložené If Then měl, i další Select, ale nakonec pro mně bylo nejpřehlednější If elseif elseif.


Ty různé druhy podtržení a nadtržení znám a už jsem s tím úspěšně pracoval, stejně jako jsem si úspěšně vytvářel různá vlastní PopUp okna  právě pro sporné případy (a nikoliv jen různé druhy MsgBox), na to je skvělé pdf https://www.openoffice.cz/novinky/kniha … office-org :-). A nějaká ta aplikace stylů mi též šla docela dobře :-).


Vaše fce BarvaPozadi se mi též dobře hodí, neboť si ještě hraji s tím barevným značením a nemám ještě úplně odladěné všechny barvy a již jsem se pral s tím, že při změně nějaké barvy ji musím různě přepisovat ručně do skriptů. Nebo jsem si nakreslil v Drawu několik barevných obdélníků a pak z programu PSPad kapátkem zjišťoval jednotlivé barvy a konvertoval je na desítkové hodnoty a to pak vkládal do Basicu do RGB(...), nebo rovnou v hexa hodnotě do standard.soc a pak barevně testoval na CS a AR textu :-). Tohle mi to odlaďování barev skutečně velmi usnadní. Děkuji.

Offline

#13 19. 7. 2017 18:41:24

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

Re: Makro: jak správně použít v makru fci getCharacterDirection VYŘEŠENO

Sub smerZnaku 'vypíše směr znaku (zleva vpravo, zprava vlevo apod.), hodnoty jsou na http://api.libreoffice.org/docs/idl/ref … 1i18n.html
    dim sluzba, s
    sluzba=createUnoService( "com.sun.star.i18n.CharacterClassification" )
    s="نتلغع" 'arabská písmena
    msgbox sluzba.getCharacterDirection(s,1) 'vypíše 13, což je správně
End Sub

Offline

Zápatí