Strona 1 z 1

Własna funkcja problem składni.

: pt lis 17, 2023 6:18 pm
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

Re: Własna funkcja problem składni.

: pt lis 17, 2023 6:39 pm
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.

Re: Własna funkcja problem składni.

: sob lis 18, 2023 10:22 am
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ą.

Re: Własna funkcja problem składni.

: sob lis 18, 2023 11:41 am
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

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

: sob lis 18, 2023 12:12 pm
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ź.