Strona 1 z 1

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

: śr kwie 24, 2013 9:19 am
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

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

: śr kwie 24, 2013 11:19 am
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")

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

: śr kwie 24, 2013 11:27 am
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 ?

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

: śr kwie 24, 2013 11:31 am
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

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

: śr kwie 24, 2013 11:52 am
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.

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

: śr kwie 24, 2013 12:01 pm
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()

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

: śr kwie 24, 2013 12:16 pm
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

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

: śr kwie 24, 2013 1:49 pm
autor: piotrosan
thx , może coś z tego ukręce ;)