MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Damcioos
Posty: 3
Rejestracja: wt paź 16, 2018 11:56 am

MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Damcioos »

Cześć, używałem do tego czasu arkusza do ewidencji czasu pracy. Zliczał mi godziny zwykle/nadliczbowe, soboty, L4, urlopy, opieki itp. Do tego wszystko się ładnie kolorowało za pomocą formatowania warunkowego. Od pewnego czasu mam problem z pracą na pliku, ponieważ znikają kolory z formatowania warunkowego. Czy da się kolorować komórkę przy użyciu makra? Miałoby to działać na zasadzie że jeżeli wartość komórki jest np. "U" to pokoloruj tło komórki na jakiś tam kolor lub zastosuj jakiś styl. Mam makro które się tak zachowuje. ale działa tylko w przypadku gdy w komórce jest wartość liczbowa. Jeżeli mam tekst to tak jakby nie działało. Dodam że plik znajduje się na dysku sieciowym i problem formatowania wynika prawdopodobnie z pracy na pliku z różnych systemów i wersji programu. Zakładam, że makro mogłoby rozwiązać problem niestety nie mam pojęcia jak się za nie zabrać. Czy ktoś mógłby podpowiedzieć od czego zacząć ?
LibreOffice 6.1 na Windows 10
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Jan_J »

na pliku z różnych systemów i wersji programu
Potwierdzam

czasem pracuję na zestawieniach z układami kilkunastu/kilkudziesięciu warunków formatowania warunkowego, działającymi w kilku tysiącach komórek.
Starsze wersje Libre Calc narzekają na zbytnią komplikację układów warunków, a Excel ignoruje niektóre z nich, dość przypadkowo zresztą.

Ale w przypadku makr zgodności Calca z Excel tym bardziej nie będzie. Z wersjami Calca już prędzej.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Damcioos
Posty: 3
Rejestracja: wt paź 16, 2018 11:56 am

Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Damcioos »

Plik działa w różnych wersjach LO czy OO. Nie jest używany na Excellu. Próbowałem kolorowania typu:
Sub Koloruj
for k = 1 to 6
For w = 1 To 31
Cell = ThisComponent.Sheets(0).getCellByPosition(k,w)
v = Cell.value
With ThisComponent.Sheets(1)
If v = "10" Then
Cell.CellBackColor = .getCellRangeByName("B1").CellBackColor
ElseIf v = 20 Then
Cell.CellBackColor = .getCellRangeByName("B2").CellBackColor
End If
End With
Next w
next k
End Sub
Koloruje wszystko ładnie na każdym komputerze. Niestety przyjmuje tylko wartości liczbowe w przeciwnym razie zwraca błąd w makro (np. v="U" lub inną wartość literową to coś się wysypuje). Jak zadeklarować zmienną v żeby działała nie tylko na liczbach?
LibreOffice 6.1 na Windows 10
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Jan_J »

// zatwierdziłem post z pytaniem o format pliku roboczego (xls czy ods) -- i znikł. W logach stoi, że został zaakceptowany.
No więc format obcy może być przyczyną problemów. Odczyt i zapis następują przez dodatkowe filtry, które mogą się zmieniać z wersji na wersję oprogramowania, powodując niezgodności. Dwa, że "pojemność" takiego obcego formatu (np. liczba warunków w formatowaniu, liczba wierszy w arkuszu itp.) może być inna niż możliwości oprogramowania. Dotyczy to także zapisu makr w skoroszycie.

Dlatego przed decyzją o użyciu makra sugerowałbym zmianę formatu na ods i sprawdzenie, czy różnice w wersjach Calca nie przeszkadzają. Nie powinny.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Jan_J »

Ad makro rozpoznające typ zawartości komórki. Przypisane do obiektu komórki metody

getString() pobiera tekst wyświetlany w komórce (nawet jeśli jest w niej liczba lub formuła);

getValue() pobiera z niej wartość wynikową (jeżeli nie ma tam liczby, pobierze 0);

getFormula() pobiera tekst formuły;

getType() pobiera numeryczny kod typu zawartości komórki:
0: pusta,
1: liczba,
2: tekst,
3: formuła.

Np.

Kod: Zaznacz cały

d = ThisComponent
s = g.Sheets.getByIndex(0)
c = s.getCellByPosition(0, 0)
napis = c.getString()
liczba = c.getValue()
typ = c.getType()
Patrz
https://www.openoffice.org/api/docs/com ... XCell.html
https://www.openoffice.org/api/docs/com ... tType.html
(dokumentacja jest raczej trudna w lekturze).
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Damcioos
Posty: 3
Rejestracja: wt paź 16, 2018 11:56 am

Re: MAKRO KOLORUJ JEŻELI WARTOŚĆ NIELICZBOWA

Post autor: Damcioos »

Dzięki za pomoc. getString() działa mi poprawnie. Sprawdziłem też zapis do *.ods, również rozwiązuje wszystkie problemy ze znikaniem formatowania warunkowego. Zostanę chyba przy wersji bez makro.
LibreOffice 6.1 na Windows 10
ODPOWIEDZ