getDataArray() 和 "Object variable not set" 错误

getDataArray() and "Object variable not set" error

安装:LibreOffice 7.0.0.3、Win10 2004 19041.450

当我 运行 这段代码时,我得到“未设置对象变量” 运行 时间错误。在 LibreOffice 调试器中,我可以正确地看到带有值的二维数组。我无法访问数组中的单个值。我做错了什么?

Function Test()
    Dim objPlay As Object
    Dim arrTable(1, 1) As String, strValue As String

    objPlay = ThisComponent.Sheets.getByName("Play")
    arrTable = objPlay.getCellRangeByPosition(0, 0, 1, 1).getDataArray()
    strValue = arrTable(0, 0)
End Function

不,在调试器中你看到的不是two-dimensional数组,而是数组的数组——一个数组,其每个元素代表范围中一行的值数组。

getDataArray method的描述中,这个叫做sequence< sequence< any > >

只需重复用于从调试器访问所需元素的语法 window:

Function Test
Dim objPlay As Object
Dim arrTable As Variant
Dim strValue As String
    objPlay = ThisComponent.getSheets().getByName("Play")
    arrTable = objPlay.getCellRangeByPosition(0, 0, 1, 1).getDataArray()
    strValue = arrTable(0)(0)
Rem And don't forget to return the function result
    Test = strValue
End Function

稀疏的 API 文档也没有给我启发。我假设必须在调用 getDataArray 之前声明数组的 size/shape。这样做是错误的,因为这样您就不能使用访问元素所需的 arr(0)(0) 语法。

这是一个读取-修改-写入例程,直到我阅读了 JohnSUN 的解释,我才开始工作:

Sub RangeArrayTest()
    Dim oSheets, inSheet, outSheet, in_range, out_range
    Dim range_data As Variant
    
    oSheets = ThisComponent.getSheets()
    inSheet = oSheets.getByName("Sheet1")
    outSheet = oSheets.getByName("Sheet2")

    range_str = "A3:C8"
    in_range =  inSheet.getCellRangebyName(range_str)
    range_data = in_range.getDataArray()
    
    MSgBox(LBound(range_data))  ' prints 0
    MSgBox(UBound(range_data))  ' prints 5
    MSgBox(LBound(range_data(0)))   ' prints 0
    MSgBox(UBound(range_data(0)))   ' prints 2
    
    for r = 0 to UBound(range_data)     ' do something to array
         for c = 0 to UBound(range_data(0))
               range_data(r)(c) = range_data(r)(c) + 1
        next c
    next r
    out_range =  outSheet.getCellRangebyName(range_str)
    out_range.setDataArray(range_data)
End Sub