Utilizar funções do Calc em macros

Conteúdo
Índice 🔎︎

# Chamar funções do Calc em Macros

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

## Chamar funções internas do Calc no BASIC

Utilize a função CreateUNOService para acessar o serviço com.sun.star.sheet.FunctionAccess.

### Exemplo:

O exemplo abaixo cria uma função chamadaMyVlook que chama a função de Calc VLOOKUP sobre uma matriz de dados passada como argumento e retorna 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")
            ' Sempre use 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-se uma matriz de dados 5 por 2 e em seguida, chama a função MyVlook e mostra o valor retornado usando MsgBox.

        Sub CallingMyVlook()
            ' Cria uma matriz 5 por 2 e a preenche com dados
            Dim myData(1 to 5, 1 to 2) as Variant
            myData(1, 1) = 1 : myData(1, 2) = "Discordo fortemente"
            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) = "Totalmente de acordo"
            ' Procura a matriz de dados
            Dim result as String
            result = MyVlook(4, myData, 2, 1)
            ' Mostra a mensagem "Discordo"
            MsgBox result
        End Sub

## Definir fórmulas de células contendo funções internas do Calc

Utilize o texto da fórmula para adicionar uma fórmula a uma célula da planilha.

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

### Exemplo:

    Sub AssignFormulaToCell
    REM Adiciona 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)"
    REM Célula A1 exibe o nome da função traduzida
    End Sub

## Chamar funções de suplemento do Calc no BASIC

As funções de suplemento estão no serviço com.sun.star.sheet.addin.Analysis.

### Exemplo:

    REM Exemplo de chamada da função RAIZPI
    Function MinhaRAIZPI(arg as double) as double
       Dim oService as Object
       oService = createUNOService("com.sun.star.sheet.addin.Analysis")
       MinhaRAIZPI = oService.getSqrtPi(arg)
    End Function

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

A função Add-In deve ser expressa por seu nome de serviço UNO.

### Exemplo:

    Sub AssignAddInFormulaToCell
    REM Adiciona uma fórmula de suplemento à 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)"
    REM Célula A1 exibe o nome da função traduzida
    End Sub

## Nomes de serviço UNO das funções de suplemento

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

Calc Function name | UNO service name
JUROSACUM | com.sun.star.sheet.addin.Analysis.getAccrint
JUROSACUMV | 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
BINADEC | com.sun.star.sheet.addin.Analysis.getBin2Dec
BINAHEX | com.sun.star.sheet.addin.Analysis.getBin2Hex
BINAOCT | com.sun.star.sheet.addin.Analysis.getBin2Oct
COMPLEXO | com.sun.star.sheet.addin.Analysis.getComplex
CONVERTER | com.sun.star.sheet.addin.Analysis.getConvert
CUPDIASINLIQ | com.sun.star.sheet.addin.Analysis.getCoupdaybs
CUPDIAS | com.sun.star.sheet.addin.Analysis.getCoupdays
CUPDIASPRÓX | com.sun.star.sheet.addin.Analysis.getCoupdaysnc
CUPDATAPRÓX | com.sun.star.sheet.addin.Analysis.getCoupncd
CUPNÚM | com.sun.star.sheet.addin.Analysis.getCoupnum
CUPDATAANT | com.sun.star.sheet.addin.Analysis.getCouppcd
IPGTO.CUM | com.sun.star.sheet.addin.Analysis.getCumipmt
PGTOPRINC | com.sun.star.sheet.addin.Analysis.getCumprinc
DECABIN | com.sun.star.sheet.addin.Analysis.getDec2Bin
DECAHEX | com.sun.star.sheet.addin.Analysis.getDec2Hex
DECAOCT | com.sun.star.sheet.addin.Analysis.getDec2Oct
DELTA | com.sun.star.sheet.addin.Analysis.getDelta
DESC | com.sun.star.sheet.addin.Analysis.getDisc
MOEDADEC | com.sun.star.sheet.addin.Analysis.getDollarde
MOEDAFRA | com.sun.star.sheet.addin.Analysis.getDollarfr
DURAÇÃO | com.sun.star.sheet.addin.Analysis.getDuration
DATAM | com.sun.star.sheet.addin.Analysis.getEdate
EFETIVA | com.sun.star.sheet.addin.Analysis.getEffect
FIMMÊS | com.sun.star.sheet.addin.Analysis.getEomonth
FUNERRO | com.sun.star.sheet.addin.Analysis.getErf
FUNERROCOMPL | com.sun.star.sheet.addin.Analysis.getErfc
FATDUPLO | com.sun.star.sheet.addin.Analysis.getFactdouble
VFPLANO | com.sun.star.sheet.addin.Analysis.getFvschedule
MDC | com.sun.star.sheet.addin.Analysis.getGcd
DEGRAU | com.sun.star.sheet.addin.Analysis.getGestep
HEXABIN | com.sun.star.sheet.addin.Analysis.getHex2Bin
HEXADEC | com.sun.star.sheet.addin.Analysis.getHex2Dec
HEXAOCT | com.sun.star.sheet.addin.Analysis.getHex2Oct
IMABS | com.sun.star.sheet.addin.Analysis.getImabs
IMAGINÁRIO | com.sun.star.sheet.addin.Analysis.getImaginary
IMARG | com.sun.star.sheet.addin.Analysis.getImargument
IMCONJ | 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
IMCOSEC | com.sun.star.sheet.addin.Analysis.getImcsc
IMCOSECH | 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
IMPOT | com.sun.star.sheet.addin.Analysis.getImpower
IMPROD | 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
IMSENO | com.sun.star.sheet.addin.Analysis.getImsin
IMSENH | com.sun.star.sheet.addin.Analysis.getImsinh
IMRAIZ | com.sun.star.sheet.addin.Analysis.getImsqrt
IMSUBTR | com.sun.star.sheet.addin.Analysis.getImsub
IMSOMA | com.sun.star.sheet.addin.Analysis.getImsum
IMTAN | com.sun.star.sheet.addin.Analysis.getImtan
TAXAJUROS | com.sun.star.sheet.addin.Analysis.getIntrate
ÉPAR | com.sun.star.sheet.addin.Analysis.getIseven
ÉÍMPAR | com.sun.star.sheet.addin.Analysis.getIsodd
MMC | com.sun.star.sheet.addin.Analysis.getLcm
MDURAÇÃO | com.sun.star.sheet.addin.Analysis.getMduration
MARRED | com.sun.star.sheet.addin.Analysis.getMround
MULTINOMIAL | com.sun.star.sheet.addin.Analysis.getMultinomial
DIATRABALHOTOTAL | com.sun.star.sheet.addin.Analysis.getNetworkdays
NOMINAL | com.sun.star.sheet.addin.Analysis.getNominal
OCTABIN | com.sun.star.sheet.addin.Analysis.getOct2Bin
OCTADEC | com.sun.star.sheet.addin.Analysis.getOct2Dec
OCTAHEX | com.sun.star.sheet.addin.Analysis.getOct2Hex
PREÇOPRIMINC | com.sun.star.sheet.addin.Analysis.getOddfprice
LUCROPRIMINC | com.sun.star.sheet.addin.Analysis.getOddfyield
PREÇOÚLTINC | com.sun.star.sheet.addin.Analysis.getOddlprice
LUCROÚLTINC | com.sun.star.sheet.addin.Analysis.getOddlyield
PREÇO | com.sun.star.sheet.addin.Analysis.getPrice
PREÇODESC | com.sun.star.sheet.addin.Analysis.getPricedisc
PREÇOVENC | com.sun.star.sheet.addin.Analysis.getPricemat
QUOCIENTE | com.sun.star.sheet.addin.Analysis.getQuotient
ALEATÓRIOENTRE | com.sun.star.sheet.addin.Analysis.getRandbetween
RECEBER | com.sun.star.sheet.addin.Analysis.getReceived
SOMASEQUÊNCIA | com.sun.star.sheet.addin.Analysis.getSeriessum
RAIZPI | com.sun.star.sheet.addin.Analysis.getSqrtpi
OTN | com.sun.star.sheet.addin.Analysis.getTbilleq
OTNVALOR | com.sun.star.sheet.addin.Analysis.getTbillprice
OTNLUCRO | com.sun.star.sheet.addin.Analysis.getTbillyield
NÚM.SEMANA | com.sun.star.sheet.addin.Analysis.getWeeknum
DIAÚTIL | com.sun.star.sheet.addin.Analysis.getWorkday
XTIR | com.sun.star.sheet.addin.Analysis.getXirr
XVPL | com.sun.star.sheet.addin.Analysis.getXnpv
FRAÇÃOANO | com.sun.star.sheet.addin.Analysis.getYearfrac
LUCRO | com.sun.star.sheet.addin.Analysis.getYield
LUCRODESC | com.sun.star.sheet.addin.Analysis.getYielddisc
LUCROVENC | com.sun.star.sheet.addin.Analysis.getYieldmat

Tópicos relacionados

Função CreateUnoService