2015-05-13 4 views
1

У меня есть asked here о том, как это сделать.Как использовать функции LibreOffice в Basic?

Теперь я пробую следующий код 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 
+0

Какую «неожиданную ошибку» вы получаете? – tohuwawohu

+0

Это IllegalArgumentException, как я уже упоминал в коде. Они касаются строк над комментариями. – SamuelTb

ответ

3

MDETERM нуждается в квадратном массиве.

И ZTEST работает только при наличии значений в диапазоне.

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