Libreoffice calc - 如何将相同的值写入一个范围
Libreoffice calc - how to write a same value into a range
我知道如何'select' LO (7.2.4.1) Calc BASIC 中的一个范围....
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
但是如何写一个值,例如“1”,使用 BASIC 进入该范围?
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
myRange.Value = 1
给出“属性 或未找到方法”错误。但是我找不到任何属性或值来跟踪 Range 以允许我做我想做的事。飞来飞去尝试
myRange.setValue = 1
myRange.writeValue = 1
myRange.setString = "1"
许多其他变体也不起作用。
非常感谢这个解决方案。谢谢
您可以编辑单个单元格的值,但不能编辑整个范围。您将不得不一次遍历范围内的所有单元格,更改每个单元格的值。
Sub Set1ToD1H6
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
For i = 0 To myRange.getRows().getCount()-1
For j = 0 To myRange.getColumns().getCount()-1
myRange.getCellByPosition(j, i).setValue(1)
Next j
Next i
End Sub
但是由于对单元格的读写操作在时间上与对整个范围的读写操作相当,所以最好使用另一种方法——准备数组中的数据并将其写入到一次操作的范围:
Sub Set1ToRange
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
dataOfRange = myRange.getData()
For i = LBound(dataOfRange) To UBound(dataOfRange)
For j = LBound(dataOfRange(i)) To UBound(dataOfRange(i))
dataOfRange(i)(j) = 1
Next j
Next i
myRange.setData(dataOfRange)
End Sub
(对于您的示例,这将快大约 30 倍,对于更大的范围,时间赢利将更加重要)
.getData() and .setData() methods work on numeric range values. To work with text strings (and numbers), use .getDataArray() and .setDataArray(), for working with cell formulas use .getFormulaArray() and .setFormulaArray()
我知道如何'select' LO (7.2.4.1) Calc BASIC 中的一个范围....
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
但是如何写一个值,例如“1”,使用 BASIC 进入该范围?
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
myRange.Value = 1
给出“属性 或未找到方法”错误。但是我找不到任何属性或值来跟踪 Range 以允许我做我想做的事。飞来飞去尝试
myRange.setValue = 1
myRange.writeValue = 1
myRange.setString = "1"
许多其他变体也不起作用。
非常感谢这个解决方案。谢谢
您可以编辑单个单元格的值,但不能编辑整个范围。您将不得不一次遍历范围内的所有单元格,更改每个单元格的值。
Sub Set1ToD1H6
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
For i = 0 To myRange.getRows().getCount()-1
For j = 0 To myRange.getColumns().getCount()-1
myRange.getCellByPosition(j, i).setValue(1)
Next j
Next i
End Sub
但是由于对单元格的读写操作在时间上与对整个范围的读写操作相当,所以最好使用另一种方法——准备数组中的数据并将其写入到一次操作的范围:
Sub Set1ToRange
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
dataOfRange = myRange.getData()
For i = LBound(dataOfRange) To UBound(dataOfRange)
For j = LBound(dataOfRange(i)) To UBound(dataOfRange(i))
dataOfRange(i)(j) = 1
Next j
Next i
myRange.setData(dataOfRange)
End Sub
(对于您的示例,这将快大约 30 倍,对于更大的范围,时间赢利将更加重要)
.getData() and .setData() methods work on numeric range values. To work with text strings (and numbers), use .getDataArray() and .setDataArray(), for working with cell formulas use .getFormulaArray() and .setFormulaArray()