Własna funkcja problem składni.

Użytkowanie arkusza kalkulacyjnego
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Własna funkcja problem składni.

Post autor: KontoLibreOffice »

Chcę dodać "funkcję użytkownika" jednak kod jest niepoprawny, jak go poprawić ?
Function EAN(a)
EAN=REGEX(a;"\b\d{13}\b")
End Function
7.5.6.2 (X86_64)
Awatar użytkownika
Jermor
Posty: 2259
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Własna funkcja problem składni.

Post autor: Jermor »

Własną funkcję piszesz w Basicu. W nim nie ma instrukcji REGEX. To jest wewnętrzna funkcja Calc-a.
Nie rozumiem też, po co piszesz taką funkcję, skoro w Calc-u możesz wpisać tę formułę bezpośrednio.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Własna funkcja problem składni.

Post autor: KontoLibreOffice »

Jermor pisze: pt lis 17, 2023 6:39 pm Nie rozumiem też, po co piszesz taką funkcję
1.Dla wygody, czytelności zagnieżdżonych funkcji, szybkości pisania funkcji (długie często używane funkcję mogą być skrócone do jednej-trzech liter)
2.Dla poszerzenia umiejętności w LO, funkcja Ean to dopiero pierwsza funkcja jaką próbowałem dodać do LO bez tego nie wiedziałbym że funkcja regex nie może być w prosty sposób dodana do makra (Czy jest sposób by to ominąć np. przez biblioteki ?).

Dodatkowo funkcja ean mogła by być jeszcze dłuższa, ponieważ mogła by sprawdzać cyfrę kontrolną.
7.5.6.2 (X86_64)
Awatar użytkownika
Jermor
Posty: 2259
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Własna funkcja problem składni.

Post autor: Jermor »

Żadna funkcja Calc-a nie może zostać wprost użyta w Basicu. Trzeba skorzystać z serwisu com.sun.star.sheet.FunctionAccess.
Ogólnie wygląda to tak:
Dim oFA
oFA = createUnoService("com.sun.star.sheet.FunctionAccess")
wynik= oFA.callFunction( "Nazwa funkcji", array(argumenty funkcji))
Nazwa funkcji musi być podana w angielskiej wersji (akurat REGEX nie ma wersji polskiej) i nie musi być zapisana wielkimi literami.
W tablicy należy podać kolejne argumenty wywoływanej funkcji.
W przypadku twojego zapytania funkcja wyglądałaby tak:

Kod: Zaznacz cały

Function cf(a)
  oFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
 cf= oFA.callFunction( "regex", array( a,"\b\d{13}\b" ) )
End Function 
Na temat tworzenia własnych funkcji napisałem tu: https://yestok.pl/lbo/y61.php
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Własna funkcja problem składni.[solved]

Post autor: KontoLibreOffice »

Jermor pisze: sob lis 18, 2023 11:41 am Żadna funkcja Calc-a nie może zostać wprost użyta w Basicu. Trzeba skorzystać z serwisu com.sun.star.sheet.FunctionAccess.
Ogólnie wygląda to tak:
Dim oFA
oFA = createUnoService("com.sun.star.sheet.FunctionAccess")
wynik= oFA.callFunction( "Nazwa funkcji", array(argumenty funkcji))
Nazwa funkcji musi być podana w angielskiej wersji (akurat REGEX nie ma wersji polskiej) i nie musi być zapisana wielkimi literami.
W tablicy należy podać kolejne argumenty wywoływanej funkcji.
W przypadku twojego zapytania funkcja wyglądałaby tak:

Kod: Zaznacz cały

Function cf(a)
  oFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
 cf= oFA.callFunction( "regex", array( a,"\b\d{13}\b" ) )
End Function 
Na temat tworzenia własnych funkcji napisałem tu: https://yestok.pl/lbo/y61.php
Dziękuję za odpowiedź.
7.5.6.2 (X86_64)
ODPOWIEDZ