问题
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
回答1:
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
来源:https://stackoverflow.com/questions/30216466/how-to-use-libreoffice-functions-into-basic