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

#1 23. 1. 2018 14:45:27

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

Test barvy pozadí a písma buňky[VYŘEŠENO]

Dnes se objevil dotaz na barvu pozadí buňky. Kdysi jsem tady na fóru zveřejnil mojí původní verzi testu (funkce spouštěná jako vzorec). Je to delší doba a tak jsem náhodou přišel na novinku - chování funkcí v Libre Office a původní verzi jsem upravil.


      Originálně tato funkce byla a je určena jen do konkrétního sešitu. Důvod je prostý - výsledek je text který je stále funkcí. Proto se musí nejprve načíst a vložit zpět (nebo jinam) jen jako text. Když bude těchto funkcí několik - začnou se někdy "hádat", respektive dávají nesprávné výsledky.
      Další věcí je to, že jsou stále aktivní a dělá to problémy při novém otevření sešitu - znovu se vlastně přepočítávají. Také z tohoto důvodu se musí testovat v sousední buňce. Například pokud budeme testovat barvy v A1, funkci musíme umístit do buňky B1.
      K této funci byl dotaz, že to nechodí z maker nad všemi sešity - důvod byl ten, že chybným zavoláním, nebo zapomenutím - ponecháním funkce aktivní sešit vyhazoval hlášení. Jedná se o tuto 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-1, SR)
barva = oCell.CellBackColor
pismo = oCell.CharColor
BarvaPozadi = "Číslo barvy pozadi = " & barva & " Číslo barvy písma = " & pismo
End Function

     Tato funkce deklarovaná jako Public funguje i z knihovny MojeMakra Standard - tedy nad všemi sešity. Ale to výslovně nedoporučuji. Jsou ale uživatelé kteří potřebují testovat barvy často - například proto aby napodobili co nejvěrněji šablony a podobně.

Public 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-1, SR)
barva = oCell.CellBackColor
pismo = oCell.CharColor
BarvaPozadi = "Číslo barvy pozadi = " & barva & " Číslo barvy písma = " & pismo
End Function


______________________________________________________________

     U LibreOffice se objevilo nové chování funkcí, které umožňuje pravidelně spustit tuto funkci a ve výstupu není vzorec ale text. To je velmi pohodlné pro práce podobného typu. Ta už se dá spouštět z hlavní knihovny standard bez negativ původní verze. Bohu žel u AOO tato funkce nefunguje.
     Ale v Libre Office se výsledek zapíše do dvou řádků (buňka se 2x zvětší ve smyslu výšky). Proto je číslo barvy na konci a dá se lépe kopírovat oproti původnímu provedení. Ale je tady ještě jedna důležitá změna. Funkce se vkládá přímo do testované buňky. Pokud potřebujeme testovat i barvu písma tak do testovací buňky něco napíšeme (cokoliv - text, číslo, vzorec) a obarvíme. Tak nastavíme estetiku buňky. Můžeme například pro neto účel někam kde to nevadí nakopírovat vzory které potřebujeme vyhodnotit a přímo do každé takové buňky vložíme =COLORS(). To můžeme vložit ze schránky a aktivovat postupně nebo naráz (pomocí dialogu najít "=" a nahradit za "=".)

Public Function Colors 'Vypíše čísla barev přímo v buňce kterou testujeme
oCell = ThisComponent.CurrentController.getSelection() 
With oCell.RangeAddress 
SH = .Sheet 
SC = .StartColumn 
SR = .StartRow
End With 
oSheet = ThisComponent.Sheets(SH) 
oCell = oSheet.GetCellbyPosition(SC, SR)
barva = oCell.CellBackColor
pismo = oCell.CharColor
oCell.Formula = "Číslo barvy pozadi = " & barva &  Chr(13) &  "Číslo barvy písma = " & pismo
oSheet.Rows(SR).Height=900
Colors = oCell.String
End Function

Editoval neutr (23. 1. 2018 14:52:39)


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

Zápatí