Libreoffice calc - 如何将相同的值写入范围

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)

许多其他变体也不起作用。

真的很感激这个解决方案。谢谢。

Joh*_*SUN 5

您可以编辑单个单元格的值,但不能编辑整个范围。您必须一次迭代该范围内的所有单元格,更改每个单元格的值。

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()