如何将LibreOffice函数用于Basic?

关于这样做的好方法,我已经_757175了 .

现在我正在尝试以下代码found here,并获得一些意外错误 .

我想我没有以正确的方式使用它 . 任何的想法 ?

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

回答(1)

2 years ago

MDETERM 需要一个正方形数组 .

只有当范围内有值时,_757179才有效 .

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