Utilização de funções do Calc em macros

Para além das funções nativas do BASIC, pode chamar funções do Calc nas suas macros e scripts e definir funções do Calc em fórmulas de células.

Chamada de funções do Calc interno no Basic

Utilize a função CreateUnoService para aceder ao serviço com.sun.star.sheet.FunctionAccess.

Exemplo:

O exemplo abaixo cria uma função chamada MyVlook que chama a função VLOOKUP do Calc sobre um conjunto de dados passado como argumento e devolve o valor encontrado pela função.


    Function MyVlook(Lookup, DataArray As Object, Index As Integer, SortedRangeLookup as Byte)
        Dim oService As Object
        Set oService = CreateUnoService("com.sun.star.sheet.FunctionAccess")
        ' Utilize sempre o nome da função em inglês
        MyVlook = oService.callFunction("VLOOKUP", Array(Lookup, DataArray, Index, SortedRangeLookup))
    End Function
  

A macro abaixo apresenta um exemplo de como a função MyVlook pode ser chamada. Primeiro, cria uma matriz de dados de 5 por 2 e, em seguida, chama a função MyVlook e apresenta o valor devolvido utilizando MsgBox.


    Sub CallingMyVlook()
        ' Cria uma matriz de 5 por 2 e preenche-a com dados
        Dim myData(1 to 5, 1 to 2) as Variant
        myData(1, 1) = 1 : myData(1, 2) = "Discordo totalmente"
        myData(2, 1) = 3 : myData(2, 2) = "Discordo"
        myData(3, 1) = 5 : myData(3, 2) = "Indeciso"
        myData(4, 1) = 7 : myData(4, 2) = "Concordo"
        myData(5, 1) = 9 : myData(5, 2) = "Concordo plenamente"
        ' Consulta o conjunto de dados
        Dim result as String
        result = MyVlook(4, myData, 2, 1)
        ' Mostra a mensagem «Discordo»
        MsgBox result
    End Sub
  

Definição de fórmulas de células que contêm funções de cálculo internas

Utilize a sequência de texto da fórmula para adicionar uma fórmula a uma célula da folha de cálculo.

Ícone de nota

Todas as funções do Calc devem ser indicadas pelos seus nomes em inglês.


Exemplo:


Sub AssignFormulaToCell
REM Adicione uma fórmula à célula A1. O nome da função deve estar em inglês.
    oCell = ThisComponent.Sheets.getByIndex(0).getCellRangeByName("A1")
    oCell.Formula = "=SUM(B1:B10)"
A célula A1 do REM apresenta o nome da função localizada
End Sub

Chamar funções de cálculo de um suplemento em BASIC

As funções do complemento do Calc encontram-se nos serviços UNO com.sun.star.sheet.addin. Analysis, com.sun.star.sheet.addin.DateFunctions e com.sun.star.sheet.addin. PricingFunctions.

Exemplo:


Exemplo REM que chama a função do complemento SQRTPI
Função MySQRTPI(arg como double) como double
   Dim oService as Object
   oService = CreateUnoService("com.sun.star.sheet.addin.Analysis")
   MySQRTPI = oService.getSqrtPi(arg)
End Function

Definir fórmulas de células com funções de complementos

A função do Add-In deve ser identificada pelo seu nome de serviço UNO.

Exemplo:


Sub AssignAddInFormulaToCell
REM Adicione uma fórmula do Add-In à célula A1. O nome da função é o nome do serviço UNO.
    oCell = ThisComponent.Sheets.getByIndex(0).getCellRangeByName("A1")
    oCell.Formula = "=com.sun.star.sheet.addin.Analysis.getBin2Dec(B1)"
A célula A1 do REM apresenta o nome da função localizada
End Sub

Nomes dos serviços UNO para funções do suplemento de análise

A tabela abaixo apresenta uma lista de todas as funções do complemento Calc Analysis e os respetivos nomes dos serviços UNO.

Nome da função do Calc

Nome do serviço UNO

ACCRINT

com.sun.star.sheet.addin.Analysis.getAccrint

ACCRINTM

com.sun.star.sheet.addin.Analysis.getAccrintm

AMORDEGRC

com.sun.star.sheet.addin.Analysis.getAmordegrc

AMORLINC

com.sun.star.sheet.addin.Analysis.getAmorlinc

BESSELI

com.sun.star.sheet.addin.Analysis.getBesseli

BESSELJ

com.sun.star.sheet.addin.Analysis.getBesselj

BESSELK

com.sun.star.sheet.addin.Analysis.getBesselk

BESSELY

com.sun.star.sheet.addin.Analysis.getBessely

BIN2DEC

com.sun.star.sheet.addin.Analysis.getBin2Dec

BIN2HEX

com.sun.star.sheet.addin.Analysis.getBin2Hex

BIN2OCT

com.sun.star.sheet.addin.Analysis.getBin2Oct

COMPLEXO

com.sun.star.sheet.addin.Analysis.getComplex

CONVERTER

com.sun.star.sheet.addin.Analysis.getConvert

COUPDAYBS

com.sun.star.sheet.addin.Analysis.getCoupdaybs

COUPDAYS

com.sun.star.sheet.addin.Analysis.getCoupdays

COUPDAYSNC

com.sun.star.sheet.addin.Analysis.getCoupdaysnc

COUPNCD

com.sun.star.sheet.addin.Analysis.getCoupncd

COUPNUM

com.sun.star.sheet.addin.Analysis.getCoupnum

COUPPCD

com.sun.star.sheet.addin.Analysis.getCouppcd

CUMIPMT

com.sun.star.sheet.addin.Analysis.getCumipmt

CUMPRINC

com.sun.star.sheet.addin.Analysis.getCumprinc

DEC2BIN

com.sun.star.sheet.addin.Analysis.getDec2Bin

DEC2HEX

com.sun.star.sheet.addin.Analysis.getDec2Hex

DEC2OCT

com.sun.star.sheet.addin.Analysis.getDec2Oct

DELTA

com.sun.star.sheet.addin.Analysis.getDelta

DESC

com.sun.star.sheet.addin.Analysis.getDisc

DOLLARDE

com.sun.star.sheet.addin.Analysis.getDollarde

DOLLARFR

com.sun.star.sheet.addin.Analysis.getDollarfr

DURAÇÃO

com.sun.star.sheet.addin.Analysis.getDuration

EDATE

com.sun.star.sheet.addin.Analysis.getEdate

EFEITO

com.sun.star.sheet.addin.Analysis.getEffect

EOMONTH

com.sun.star.sheet.addin.Analysis.getEomonth

ERF

com.sun.star.sheet.addin.Analysis.getErf

ERFC

com.sun.star.sheet.addin.Analysis.getErfc

FACTDOUBLE

com.sun.star.sheet.addin.Analysis.getFactdouble

FVSCHEDULE

com.sun.star.sheet.addin.Analysis.getFvschedule

GCD

com.sun.star.sheet.addin.Analysis.getGcd

GESTEP

com.sun.star.sheet.addin.Analysis.getGestep

HEX2BIN

com.sun.star.sheet.addin.Analysis.getHex2Bin

HEX2DEC

com.sun.star.sheet.addin.Analysis.getHex2Dec

HEX2OCT

com.sun.star.sheet.addin.Analysis.getHex2Oct

IMABS

com.sun.star.sheet.addin.Analysis.getImabs

IMAGINÁRIO

com.sun.star.sheet.addin.Analysis.getImaginary

IMARGUMENT

com.sun.star.sheet.addin.Analysis.getImargument

IMCONJUGATE

com.sun.star.sheet.addin.Analysis.getImconjugate

IMCOS

com.sun.star.sheet.addin.Analysis.getImcos

IMCOSH

com.sun.star.sheet.addin.Analysis.getImcosh

IMCOT

com.sun.star.sheet.addin.Analysis.getImcot

IMCSC

com.sun.star.sheet.addin.Analysis.getImcsc

IMCSCH

com.sun.star.sheet.addin.Analysis.getImcsch

IMDIV

com.sun.star.sheet.addin.Analysis.getImdiv

IMEXP

com.sun.star.sheet.addin.Analysis.getImexp

IMLN

com.sun.star.sheet.addin.Analysis.getImln

IMLOG10

com.sun.star.sheet.addin.Analysis.getImlog10

IMLOG2

com.sun.star.sheet.addin.Analysis.getImlog2

IMPOWER

com.sun.star.sheet.addin.Analysis.getImpower

IMPRODUCT

com.sun.star.sheet.addin.Analysis.getImproduct

IMREAL

com.sun.star.sheet.addin.Analysis.getImreal

IMSEC

com.sun.star.sheet.addin.Analysis.getImsec

IMSECH

com.sun.star.sheet.addin.Analysis.getImsech

IMSIN

com.sun.star.sheet.addin.Analysis.getImsin

IMSINH

com.sun.star.sheet.addin.Analysis.getImsinh

IMSQRT

com.sun.star.sheet.addin.Analysis.getImsqrt

IMSUB

com.sun.star.sheet.addin.Analysis.getImsub

IMSUM

com.sun.star.sheet.addin.Analysis.getImsum

IMTAN

com.sun.star.sheet.addin.Analysis.getImtan

INTRATE

com.sun.star.sheet.addin.Analysis.getIntrate

ISEVEN

com.sun.star.sheet.addin.Analysis.getIseven

ISODD

com.sun.star.sheet.addin.Analysis.getIsodd

LCM

com.sun.star.sheet.addin.Analysis.getLcm

MDURATION

com.sun.star.sheet.addin.Analysis.getMduration

MROUND

com.sun.star.sheet.addin.Analysis.getMround

MULTINOMIAL

com.sun.star.sheet.addin.Analysis.getMultinomial

NETWORKDAYS

com.sun.star.sheet.addin.Analysis.getNetworkdays

NOMINAL

com.sun.star.sheet.addin.Analysis.getNominal

OCT2BIN

com.sun.star.sheet.addin.Analysis.getOct2Bin

OCT2DEC

com.sun.star.sheet.addin.Analysis.getOct2Dec

OCT2HEX

com.sun.star.sheet.addin.Analysis.getOct2Hex

ODDFPRICE

com.sun.star.sheet.addin.Analysis.getOddfprice

ODDFYIELD

com.sun.star.sheet.addin.Analysis.getOddfyield

ODDLPRICE

com.sun.star.sheet.addin.Analysis.getOddlprice

ODDLYIELD

com.sun.star.sheet.addin.Analysis.getOddlyield

PRICE

com.sun.star.sheet.addin.Analysis.getPrice

PRICEDISC

com.sun.star.sheet.addin.Analysis.getPricedisc

PRICEMAT

com.sun.star.sheet.addin.Analysis.getPricemat

QUOCIENTE

com.sun.star.sheet.addin.Analysis.getQuotient

RANDBETWEEN

com.sun.star.sheet.addin.Analysis.getRandbetween

RECEBIDO

com.sun.star.sheet.addin.Analysis.getReceived

SERIESSUM

com.sun.star.sheet.addin.Analysis.getSeriessum

SQRTPI

com.sun.star.sheet.addin.Analysis.getSqrtpi

TBILLEQ

com.sun.star.sheet.addin.Analysis.getTbilleq

TBILLPRICE

com.sun.star.sheet.addin.Analysis.getTbillprice

TBILLYIELD

com.sun.star.sheet.addin.Analysis.getTbillyield

WEEKNUM

com.sun.star.sheet.addin.Analysis.getWeeknum

DIAÚTIL

com.sun.star.sheet.addin.Analysis.getWorkday

XIRR

com.sun.star.sheet.addin.Analysis.getXirr

XNPV

com.sun.star.sheet.addin.Analysis.getXnpv

YEARFRAC

com.sun.star.sheet.addin.Analysis.getYearfrac

RENDIMENTO

com.sun.star.sheet.addin.Analysis.getYield

YIELDDISC

com.sun.star.sheet.addin.Analysis.getYielddisc

YIELDMAT

com.sun.star.sheet.addin.Analysis.getYieldmat


Nomes dos serviços UNO para as funções do suplemento de data

A tabela abaixo apresenta uma lista de todas as funções do complemento Calc Date e os respetivos nomes dos serviços UNO.

Nome da função do Calc

Nome do serviço UNO

DIASNOMÊS

com.sun.star.sheet.addin.DateFunctions.getDaysInMonth

DIASNOANO

com.sun.star.sheet.addin.DateFunctions.getDaysInMonth

MESES

com.sun.star.sheet.addin.DateFunctions.getDiffMonths

SEMANAS

com.sun.star.sheet.addin.DateFunctions.getDiffWeeks

ANOS

com.sun.star.sheet.addin.DateFunctions.getDiffYears

ROT13

com.sun.star.sheet.addin.DateFunctions.getRot13

SEMANASNOANO

com.sun.star.sheet.addin.DateFunctions.getWeeksInYear


Nomes dos serviços UNO para as funções do complemento de fixação de preços

A tabela abaixo apresenta uma lista de todas as funções do Calc Pricing Add-In e os respetivos nomes de serviço UNO.

Nome da função do Calc

Nome do serviço UNO

OPT_BARRIER

com.sun.star.sheet.addin.PrincingFunctions.getOptBarrier

OPT_PROB_HIT

com.sun.star.sheet.addin.PrincingFunctions.getOptProbHit

OPT_PROB_INMONEY

com.sun.star.sheet.addin.PrincingFunctions.getOptProbInMoney

OPT_TOUCH

com.sun.star.sheet.addin.PrincingFunctions.getOptTouch


Necessitamos da sua ajuda!

Necessitamos da sua ajuda!