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

Posted

技术标签:

【中文标题】Libreoffice calc - 如何将相同的值写入范围【英文标题】:Libreoffice calc - how to write a same value into a range 【发布时间】:2021-12-13 05:23:31 【问题描述】:

我知道如何在 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"

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

非常感谢您的解决方案。谢谢。

【问题讨论】:

【参考方案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() 方法适用于数值范围值。要使用文本字符串(和数字),请使用 .getDataArray() and .setDataArray(),要使用单元格公式,请使用 .getFormulaArray() and .setFormulaArray()

【讨论】:

谢谢!我真的很感激帮助。我曾认为使用嵌套 for/next 循环的解决方案能够做到这一点,但似乎我的“提议的代码”非常有用和普遍,以至于可能有一种方法或属性可以按照我的方式去做.但是我对它的所有搜索都是空白,这表明它从未以我的方式完成。哦,好吧......再次感谢您如此迅速地回复。 :D 您的意思是“...在 Excel 和 VBA 中”? Excel 和 Calc 电子表格架构非常不同。这类似于在 Excel 中您可以为单个单元格获取 .Text,但不能为某个范围获取它。只是把它当作不可避免的自然灾害——你无能为力,所以你要适应环境。 我确实来自过去的 Excel VBA 经验。我确实非常喜欢 VBA,但我觉得我必须转向免费和开源软件 (FOSS) 并支持它(例如通过每月捐款)。更重要的是,经过几个月的准备,我终于在我的 Daily driver 笔记本电脑上删除了 Windows,现在运行 Linux Mint,一切顺利!现在我很高兴开始学习 LO 的基础知识,虽然我很害怕 UNO/调度员! 哦,@Miklos,我已经害怕调度员将近 20 年了——它是如此冗长和模糊!但是有一个出路——不要使用dispatcher,按照his book中的Andrew Pitonyak推荐的方式编写代码(你不需要从头到尾阅读,把它当作参考书——在中找到相应的部分目录并获取您现在和现在需要的代码 sn-p)。此外,MRI 将在创建宏方面提供重要帮助

以上是关于Libreoffice calc - 如何将相同的值写入范围的主要内容,如果未能解决你的问题,请参考以下文章

MS OFFICE excel vs Open office Calc vs libreoffice calc 以及相同的公式对每个原因都不起作用任何建议

LibreOffice Calc 单元格文本

如何防止 LibreOffice Calc 将 CSV 保存为 text/html?

如何将数据从 LibreOffice Calc 导入 SQL 数据库?

如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中

如何在 libreoffice calc 中编写 python 宏来发送和接收数据