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
安装: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