【问题标题】:How to get the row and column number of a cell using a LibreOffice Basic function如何使用 LibreOffice Basic 函数获取单元格的行号和列号
【发布时间】:2020-08-28 16:45:37
【问题描述】:

我想编写一个 Libreoffice-Basic 函数,该函数考虑了放置函数的单元格的行和列。我想如果我可以定义一个函数,例如:

Function MyRowFun()
    MyRowFun = ?????
End Function

复制内置函数ROW()。换句话说,一旦我在任何给定的单元格中输入了"=MyRowFun()",该单元格的显示就与我输入了"=ROW()" 一样。

如果能得到对应的工作表名也不错。

非常感谢您提供的任何帮助,例如在线手册的指针。


PS:花了很多时间搜索后,我找到了很多地方解释如何识别选择下的单元格,使用ThisComponent.CurrentSelection.AbsoluteName,但我关心放置公式的单元格,而不是当前选定的单元格。

【问题讨论】:

  • 你为什么要为难自己?您已经搜索了很多,并且您可能已经多次看到“不可能”,不是吗?是的,今天的 API 没有提供这样的机会(也许有一天会实现,我认为不会很快)。如果您知道不带参数的 SHEET()、ROW() 和 COLUMN() 可以返回 sheet-row-column 编号,那么在调用 UDF 时只需将它们作为参数传递。
  • @JohnSUN,感谢您的评论。好吧,我想我很不走运,或者可能没有使用正确的搜索词,但到目前为止,我还没有看到有人提到这是不可能的。当然,我已经考虑过将这些东西作为参数传递,但我相信你会同意这样的解决方案并不是最优雅的。
  • 是的,我也认为最终用户需要让事情变得更容易(例如,让他在每次调用我的时候都不需要传递三个空参数 sheet-column-row功能)。另一方面,我同意开发人员的观点,他们在被要求提供有关“调用者”的信息时,立即问“为什么?你的函数想知道它的位置的原因是什么。你的算法要做什么?这个情报?”你会怎么回答他们?确实,你要写的不是数据值(字符串,数字,日期)而是单元格位置?
  • @JohnSUN,我猜你的论点也可以用来支持废除内置函数 COLUMN() 和 ROW()。
  • 不,因为 TDF 试图为用户提供 Excel 所拥有的一切(不是在 VBA 中,而是在电子表格计算器中),即整个功能范围。但他们并不急于向我们——你和我——开放一些现有的但隐藏的机会。 “你为什么需要这个?不要生产超出必要的精华。”到目前为止,没有人能够向他们解释知道单元地址可以做什么。 (一个令人信服的理由是“获取颜色以将此行中的值分配给某个类别”遇到了反对“颜色不是信息,这是一个设计工具”)

标签: libreoffice-calc libreoffice-basic


【解决方案1】:

对于遇到此问题的其他任何人,@JohnSUN 在第一条评论中给出了解决方案:

如果您知道不带参数的 SHEET()、ROW() 和 COLUMN() 可以返回 sheet-row-column 编号,那么在调用 UDF 时只需将它们作为参数传递。

发帖人希望找到不同类型的解决方案,但没有其他办法。

【讨论】:

  • 这当然不是我希望的答案,但它肯定会结束我的搜索!
【解决方案2】:
No SHEET(), ROW(), COLUMN()

Use Excel VBA Range. Just referring to itself. And without quotes.

C5: =UDF(Arg1;Agr2;C5)
________________________

Option VBASupport 1

Function UDF(Arg1, Arg2, Optional Caller)

    If Not IsMissing(Caller) Then

        sCallerName = Caller.CellRange.AbsoluteName

        Print sCallerName

    End If

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2013-07-07
    • 2023-03-09
    • 1970-01-01
    • 2015-03-14
    • 2023-01-15
    相关资源
    最近更新 更多