Początki - Łączenie z plikiem zewnętrznym

Makropolecenia i funkcje w języku Basic
piotrosan
Posty: 16
Rejestracja: śr kwie 24, 2013 9:08 am

Początki - Łączenie z plikiem zewnętrznym

Post autor: piotrosan »

Witam

Dopiero zaczynam coś robić wykorzystując Macra w LibreOffice. Nie ukrywam, że posiłkuje się przykładami, które zaczerpuje w sieci. Mam plan aby stworzyć w jednym pliku .ods macro, które będzie pobierało dane z innego pliku ods. Znalazłem instrukcję, któr ateoretycznie to robi, nigdzie indziej nie znalazłem takiego rozwiązania, w ogóle nie znalazłem oprócz tego żadnego rozwiązania tego problemu. Poniżej chciałem wam przedstawić ten kawałek kodu w Basic'u. Niestety podczas uruchamiania macra pojawia się komunikat "Nie zdefiniowano procedury lub funkcji" i zaznacza się linia "Set xSheet = GetObject("/home/piotrosan/Pulpit/test.ods")". Czy w ogóle można coś takiego w taki sposób zrobić ? Czy ja jeszcze muszę coś dopisać aby to zadziałało ?
Przyznam, że bardzo mało jest przykładów w sieci , albo ja jakoś nie umiem ich szukać.

Poniżej moje macro
Option Explicit

Sub Porownywarka
Dim xSheet as Object
Set xSheet = GetObject("/home/piotrosan/Pulpit/test.ods")
oCell = xSheet.getCellByPosition(0, 0)
MsgBox "oCell.value"
End Sub
LibreOffice 3.5.7.2 OS Ubuntu 12.04
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: belstar »

A nie lepiej zamiast makra użyć funkcji DDE()

Kod: Zaznacz cały

=DDE("soffice";"/home/slav/Pulpit/przykład.ods";"Arkusz1.A1")
LibreOffice 5.1.2.2 Ubuntu 16 LTS
piotrosan
Posty: 16
Rejestracja: śr kwie 24, 2013 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: piotrosan »

Chciałem dodatkowo w locie obrobić dane, wyciągnąć z tgo obiektu jedną kolumne, i porównać każdy element z innymi danymi. Ok ale może chce zabić komara armatą.

Generalnie chce zbudować taki automat, który będzie mi porównywał wartości z jednego pliku z wartościami z drugiego pliku i wypluwał w jakimś arkuszu/zakładce wynik. Macie jakieś propozycje inne niż Macro ?
LibreOffice 3.5.7.2 OS Ubuntu 12.04
piotrosan
Posty: 16
Rejestracja: śr kwie 24, 2013 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: piotrosan »

W sumie mogę to napisać w innym języku , najwyżej będę porównywał pliki tekstowe , ale jest to robione dla koleżanki z pracy więc nie wiem czy będzie potrafiła uruchamiać skrypt z poziomu shell'a
LibreOffice 3.5.7.2 OS Ubuntu 12.04
piotrosan
Posty: 16
Rejestracja: śr kwie 24, 2013 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: piotrosan »

Mimo wszystko jakby ktoś podpowiedział jak to wykonać w LibreOffice byłbym wdzięczny, lub podsunął jakąś dobrą dokumentację, rozszerzoną o działanie na różnych plikach , bądź opis obiektów dostępnych w LibreOffice.
LibreOffice 3.5.7.2 OS Ubuntu 12.04
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: belstar »

Idąc za ciosem z pierwszego mojego postu, proponuje wykorzystać w kodzie funkcje arkuszowe. Wstawiam ci dwa przykłady użycia funkcji arkuszowych w makrze.

Kod: Zaznacz cały

'funkcja arkuszowa PODAJ.POZYCJE
'argumenty
'Arkusz - Podać nazwę arkusza
'Szukane - Ciąg tekstowy do wyszukania
'zakres - Zkares komórek w ostaci tekstu - "A1:A500"
'Ktory - 0 pierwszy 1 ostatni
Function getMatch(Arkusz, Szukane, Zakres, Ktory)
	Dim oFunct As Object
	Dim oRange As Object
	Dim arg
	oFunct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	oRange = arkusz.getCellRangeByName(Zakres)
	arg = ARRAY(szukane, oRange, ktory)
	getMatch = oFunct.callFunction("MATCH" ,  arg) 
End Function

Function getCountA(Arkusz, Kolumna)
	Dim oFunct As Object
	Dim oRange As Object
	
	oFunct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	oRange = Arkusz.getCellRangeByName(Kolumna & "1:" & Kolumna & "15000")
	getCountA = oFunct.callFunction("COUNTA" , ARRAY(oRange)) 
End Function	

Na podstawie tych przykładów stwórz sobie własną funkcje DDE()
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: belstar »

Albo inaczej:
Otwórz dokument (może być ukryty żeby nie było go widać dla użytkownika).
Pobierz interesujące cię dane
Zamknij go.
Itd.
Przykład jak to możesz zrobić znajdziesz
http://forum.openoffice.org/pl/forum/vi ... f=9&t=1797
LibreOffice 5.1.2.2 Ubuntu 16 LTS
piotrosan
Posty: 16
Rejestracja: śr kwie 24, 2013 9:08 am

Re: Początki - Łączenie z plikiem zewnętrznym

Post autor: piotrosan »

thx , może coś z tego ukręce ;)
LibreOffice 3.5.7.2 OS Ubuntu 12.04
ODPOWIEDZ