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 ela cria uma matriz de dados 5 por 2 e, em seguida, chama a função MyVlook e mostra o valor retornado usando a função 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.

note

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 (Add-In) estão disponíveis nos serviços UNO com.sun.star.sheet.addin.Analysis, com.sun.star.sheet.addin.DateFunctions e com.sun.star.sheet.addin.PricingFunctions.

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 dos serviços UNO para Funções de Suplemento de Análise

A tabela abaixo apresenta uma lista com todas as funções de suplemento do Calc para Análise e seus respectivos nomes de serviço UNO.

Nome da função Calc

Nome do serviço UNO

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


Nomes dos serviços UNO para funções de suplemento de Data

A tabela abaixo apresenta uma lista com todas as funções de suplemento do Calc para Datas e seus respectivos nomes de serviço UNO.

Nome da função 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 funções de suplemento de Preços

A tabela abaixo apresenta uma lista com todas as funções de suplemento do Calc para Preços e seus respectivos nomes de serviço UNO.

Nome da função 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


♥ Doe para nosso projeto! ♥