Search code examples
libreofficebasiclibreoffice-calclibreoffice-basic

How to use LibreOffice functions into Basic?


I've asked here about the good way to do so.

Now I'm trying the following code found here, and get some unexpected errors.

I suppose I'm not using it the correct way. Any idea ?

Sub Main 
    Dim aResult 
    Dim aFunc 
    Dim oRange 

    aFunc = GetProcessServiceManager().createInstance("com.sun.star.sheet.FunctionAccess") 

    aResult = aFunc.callFunction("SUM", Array(1, 2, 3))
    ' ---- Works OK
    Print aResult 

    aResult = aFunc.callFunction("MDETERM", Array(2, 5, 8)) 
    ' ---- IllegalArgumentException
    Print aResult 

    oRange = ThisComponent.sheets(0).getcellrangebyname("B4:B6") 
    aResult = aFunc.callFunction("ZTEST", Array(oRange, 2.5, 1.0)) 
    ' ---- IllegalArgumentException
    Print aResult 
End Sub

Solution

  • MDETERM needs a square array.

    And ZTEST works only if there are values in the range.

    Sub Main 
    
        Dim oFunc as Object
        Dim vResult as Variant
        Dim oRange as Object
        Dim bDoZTEST as Boolean
        Dim aSubArray as Variant
        Dim vValue as Variant
    
        oFunc = GetProcessServiceManager().createInstance("com.sun.star.sheet.FunctionAccess") 
    
        vResult = oFunc.callFunction("SUM", Array(1, 2, 3))
        Print vResult 
    
        vResult = oFunc.callFunction("MDETERM", Array(Array(Array(2, 5, 8), Array(1, 4, 3), Array(9, 7, 6)))) 
        Print vResult 
    
        oRange = ThisComponent.sheets(0).getCellRangeByName("B4:B6") 
        bDoZTEST = true
        vResult = Empty
        for each aSubArray in oRange.DataArray
         for each vValue in aSubArray
          if not isNumeric(vValue) then bDoZTEST = false
         next
        next
        if bDoZTEST then vResult = oFunc.callFunction("ZTEST", Array(oRange, 2.5, 1.0)) 
        Print vResult 
    
    End Sub