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

Makropolecenia i funkcje w języku Basic

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

Postprzez piotrosan » Śr kwi 24, 2013 9:19 am

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
piotrosan
 
Posty: 16
Dołączył(a): Śr kwi 24, 2013 9:08 am

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

Postprzez belstar » Śr kwi 24, 2013 11:19 am

A nie lepiej zamiast makra użyć funkcji DDE()
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=DDE("soffice";"/home/slav/Pulpit/przykład.ods";"Arkusz1.A1")
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

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

Postprzez piotrosan » Śr kwi 24, 2013 11:27 am

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
Dołączył(a): Śr kwi 24, 2013 9:08 am

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

Postprzez piotrosan » Śr kwi 24, 2013 11:31 am

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
Dołączył(a): Śr kwi 24, 2013 9:08 am

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

Postprzez piotrosan » Śr kwi 24, 2013 11:52 am

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
piotrosan
 
Posty: 16
Dołączył(a): Śr kwi 24, 2013 9:08 am

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

Postprzez belstar » Śr kwi 24, 2013 12:01 pm

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   Rozszerz widokZwiń widok
'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: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

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

Postprzez belstar » Śr kwi 24, 2013 12:16 pm

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
viewtopic.php?f=9&t=1797
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

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

Postprzez piotrosan » Śr kwi 24, 2013 1:49 pm

thx , może coś z tego ukręce ;)
LibreOffice 3.5.7.2 OS Ubuntu 12.04
piotrosan
 
Posty: 16
Dołączył(a): Śr kwi 24, 2013 9:08 am


Powrót do Basic

Kto przegląda forum

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