Mic*_*los 1 basic range libreoffice
我知道如何在 LO (7.2.4.1) Calc BASIC 中“选择”一个范围....
ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
Run Code Online (Sandbox Code Playgroud)
但是如何使用 BASIC 将一个值(例如“1”)写入该范围?
myRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("D1:H6")
myRange.Value = 1
Run Code Online (Sandbox Code Playgroud)
给出“未找到属性或方法”错误。但我找不到任何属性或值可以让我做我想做的事情。四处奔波并尝试
myRange.setValue = 1
myRange.writeValue = 1
myRange.setString = "1"
Run Code Online (Sandbox Code Playgroud)
许多其他变体也不起作用。
真的很感激这个解决方案。谢谢。
您可以编辑单个单元格的值,但不能编辑整个范围。您必须一次迭代该范围内的所有单元格,更改每个单元格的值。
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
Run Code Online (Sandbox Code Playgroud)
但是,由于对单元格的读写操作在时间上与对整个范围的读写操作相当,因此最好使用另一种方法 - 在数组中准备数据并在一次操作中将其写入范围:
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
Run Code Online (Sandbox Code Playgroud)
(对于您的示例,这将快大约 30 倍,对于更大的范围,时间获胜将更加显着)
.getData () 和 .setData()方法适用于数值范围值。要处理文本字符串(和数字),请使用.getDataArray() 和 .setDataArray(),要处理单元格公式,请使用.getFormulaArray() 和 .setFormulaArray()
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |