当前位置: 首页 > 知识库问答 >
问题:

从LibreOffice Calc中的脚本引用当前单元格

周志文
2023-03-14
function myCell() As String
    Dim oService As Object
    oService = createUnoService("com.sun.star.sheet.FunctionAccess")
    myCell = oService.callFunction("CELL",Array("ADDRESS"))
end function
=MyCell()

它将始终返回$A$1,但我需要获得$B$2

怎么啦?如何实现这一点?

共有1个答案

张伯寅
2023-03-14

这是办不到的。这有几个原因。

  1. 您的想法“此工作表上的一个函数会改变电子表格中其他地方的一些东西”与电子表格的一个概念相矛盾--“一个函数的结果只能改变写入此函数的单元格”。现在,这只针对当前工作表实现--当前工作表的内容在重新计算函数时被阻塞。但是,您必须做好准备,在下一个版本中,禁止可以扩展到当前书的所有页(也可能扩展到所有打开的书),并且您的算法将停止工作。还不知道是否会这样做,但不值得冒这个险。
  2. 没有任何机制允许您从代码中获取关于“调用方”、关于启动代码的对象的附加信息--函数在开始执行之前必须通过输入参数接收所有必要的信息。(此限制不适用于子程序)。
  3. 没有任何机制允许您从代码中获取关于“调用方”、关于启动代码的对象的附加信息--函数在开始执行之前必须通过输入参数接收所有必要的信息。(此限制不适用于子程序)。
  4. 执行函数的结果是一个值--数字、字符串、数字或字符串数组、对象引用、结构或用户定义的类型。如您所见,此列表中没有“单元格背景颜色”值。

既然我已经列出了为什么不能这样做的主要原因(这远远不是全部),我将展示几个“肮脏的黑客”如何不这样做。

    null
Function setBkColorTo(cellAddress as String, nColor As Long) As String
Dim oSheets As Variant
Dim oCellRangesByName As Variant
Dim i As Long 
    setBkColorTo = "Wrong data!"
    On Error GOTO WrongData
    oSheets = ThisComponent.getSheets()
    oCellRangesByName = oSheets.getCellRangesByName(cellAddress)
    For i = LBound(oCellRangesByName) To UBound(oCellRangesByName)
        oCellRangesByName(i).CellBackColor = nColor
    Next i
    setBkColorTo = "Colorized '" + cellAddress + "'"
    Exit Function
WrongData:

End Function
 类似资料:
  • 我有一份我正在处理的项目清单。我正在寻找初始列表中的特定项目,并希望在遍历列表时从该列表中删除已找到的项目。我遍历列表使用 有没有一种方法可以在不操纵两个列表的情况下做到这一点?

  • 问题内容: 我正在尝试获取当前正在运行的Python脚本的名称。 我有一个名为的脚本,我想做这样的事情以获得脚本名称: 问题答案: 您可以使用获取当前文件的名称。在主模块中使用时,这是最初调用的脚本的名称。 如果要省略目录部分(可能存在),可以使用。

  • 问题内容: 多年来,我从事的几乎所有产品都涉及到一定程度的Shell脚本(或Windows上的批处理文件,PowerShell等)。即使我们使用Java或C ++编写了大量代码,但似乎总是存在一些集成或安装任务,而这些任务或任务可以通过Shell脚本更好地完成。 因此,shell脚本成为附带代码的一部分,因此需要像已编译的代码一样进行测试。有没有人对其中的一些shell脚本单元测试框架有经验,例如

  • 我有几个谷歌表,我连接和更新他们之间的单元格。现在,我必须使用R1C1或A1类型引用来定义基于特定列的获取或设置单元格。 如果添加了新列,所有这些引用现在都将关闭。 每个工作表的第一行都有列标题作为这些单元格中的值。 我能否以[columnHeader]5等格式引用该列第五行中的单元格? 我曾想过将每个单独的列标题设置为“命名范围”,但我一直无法使用[named range]5引用单元格。 我想我

  • 我有一种类型的二维对象数组。我想根据每个表单元格的数据、行和列索引对其进行格式化。因此,我必须确切地知道我当前正在格式化TableView的哪个单元格。在SetCellFactory中的updateItem中找不到提供当前单元格索引的方法。下面是创建TableView的全部代码:

  • 问题内容: 我想在Python脚本的输出中包括当前的git哈希(作为生成该输出的代码的 版本号 )。 如何在Python脚本中访问当前的git哈希? 问题答案: 该命令是创建代码的人为表示的“版本号”的好方法。从文档中的示例中: 使用git.git之类的当前树,我得到: 即我的“父”分支的当前头基于v1.0.4,但是由于它的顶部还有一些提交,describe添加了额外的提交数量(“ 14”)和该提