automatyczne odświeżanie kwerendy

Użytkowanie arkusza kalkulacyjnego

automatyczne odświeżanie kwerendy

Postprzez dentopolis » Śr maja 20, 2020 6:09 pm

mam zarejestrowane połączenie z bazą base, pobieram dane i działa, ale chciałbym, żeby kwerenda odświeżała się automatycznie przy otwarciu arkusza, czy to możliwe?
LibreOffice 6.4
dentopolis
 
Posty: 160
Dołączył(a): Pn wrz 23, 2013 2:48 pm

Re: automatyczne odświeżanie kwerendy

Postprzez Rafkus » Śr maja 20, 2020 11:09 pm

Jest to możliwe, musisz nagrać makro odświeżające zakres danych, a następnie przypisać je do zdarzenia Otwórz dokument, z tym że znam 2 metody utworzenia tabeli przestawnej w arkuszu z bazy danych.

Metoda 1.
Do arkusza są pobierane dane z bazy np. do zakresu Arkusz1.A1:D100 i na podstawie tego zakresu jest utworzona tabela.
Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub ZakresDanychTabeliPrzestawnej_1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "Arkusz1.$B$4"      'ta komórka jest w zakresie danych pobranych z bazy
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DataAreaRefresh", "", 0, Array())
end sub


Metoda 2
Tabela przestawna pobiera dane prosto z kwerendy bazy danych
Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub ZakresDanychTabeliPrzestawnej_2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "Arkusz1.$H$7"       'ta komórka jest w tabeli przestawnej

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end sub


EDIT:
Ups, gdzie ja wczoraj widziałem że chcesz odświeżyć tabelę przestawną ??? :oops: Wykorzystaj makro przedstawione w metodzie 1.
OpenOffice 4.1.6. oraz LibreOffice 6.4 Widows 10
Libre 4.2.5.2 Windows XP
Avatar użytkownika
Rafkus
 
Posty: 148
Dołączył(a): Cz kwi 12, 2018 10:26 pm


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości