Strona 1 z 1
Listener ukrywania wierszy
: śr mar 22, 2017 6:39 pm
autor: s1w_
Potrzebuję oprogramować Listener do wykrywania zmian właściwości isVisible dla wierszy skoroszytu calc.
XEventListener ani XModifyListener nie wykrywają tych zmian
Kod: Zaznacz cały
Sub add_eventsListener
Dim ePrefix As String, eService As String
'oMouseCurrCont = ThisComponent.CurrentController
ePrefix = "event_"
eService = "com.sun.star.document.XEventListener"
If IsNull(mEventHandler) Then
mEventHandler = CreateUnoListener(ePrefix, eService)
ThisComponent.addEventListener(mEventHandler)
EndIf
End Sub
Sub event_notifyEvent(oEvent)
msgbox "event: " & oEvent.EventName
End Sub
Re: Listener ukrywania wierszy
: czw mar 23, 2017 2:28 pm
autor: belstar
Krótkie śledztwo wykazało że może być problem, choć gwarancji nie daję.
Jedyne co mogę ci zaproponować to rozwiązanie problemu na około.
Gdzieś na forum (poszukaj sobie) wstawiłem plik z przykładem "suma_wg_koloru_komórki". Jest tam wśród wielu funkcji też funkcja UDF o nazwie
CELL_VISIBLE(), zaimplementuj sobie ją gdzieś w głębokich otchłaniach arkusz, a listener dodaj na te komórki gdzie zwraca ona wynik swojego działania. Wynikiem jest 1 gdy komórka jest widoczna, także gdy wynik funkcji się zmieni, listener to wychwyci i uruchomi twoją procedurę. W przykładzie wywołanie funkcji jest otoczone funkcją
JEŻELI() a to po to bo Calc sam z siebie nie przelicza funkcji
CELL_XXX automatycznie.
I mała uwaga, w przykładzie funkcja
JEŻELI() sprawdza czy
TERAZ() = TERAZ(), kiedyś po dyskusji z Jan_J doszliśmy do bezpieczniejszego rozwiązania, mianowicie
TERAZ() > 0. Także zastosuj poniższą formułę:
Kod: Zaznacz cały
=JEŻELI(TERAZ()>0;CELL_VISIBLE(ARKUSZ();WIERSZ(A1);KOLUMNA(A1));"")
Re: Listener ukrywania wierszy
: czw mar 23, 2017 3:11 pm
autor: s1w_
Jest to jakieś rozwiązanie, nie wiem czy kosztowo opłacalne (obliczanie funkcji basic z komórki robiło widoczne spowolnienie)
Hmm potrzebowałem tego do notyfikacji, czy wbudowany autofiltr został użyty <- korzystanie z niego nie robi eventow, też nie doszukałem się adekwatnego Listenera :/
ps. świetny pomysł z tą formułą, przyda się w wielu innych rzeczach
Re: Listener ukrywania wierszy
: pn mar 27, 2017 9:26 pm
autor: s1w_
Eureka! Mimo że nie osiągnąłem rezultatu z czystego BASIC'a, znalazłem genialną formułę, która się odnosi bezpośrednio do autofiltra!! i updateuje bez obejścia:
Kod: Zaznacz cały
"=SUBTOTAL(3;A2:A" & getLastRow(Sheet) + 1 & ")"
gdyby nie podpowiedź nie znalazłbym tego rozwiązania, także dzięki!
PL:
https://wiki.openoffice.org/wiki/Docume ... L_function