从 libreoffice calc basic 中的“ThisComponent.CurrentSelection”获取行号和列号

Posted

技术标签:

【中文标题】从 libreoffice calc basic 中的“ThisComponent.CurrentSelection”获取行号和列号【英文标题】:Get Row and Column number from "ThisComponent.CurrentSelection" in libreoffice calc basic 【发布时间】:2020-06-16 23:23:46 【问题描述】:

我有这段代码,我可以在其中获取当前选定的单元格并使用它来修改其值:

theSelection = ThisComponent.CurrentSelection
theSelection.setString("some value")

现在我想移到右边的下一列,如果是 Microsoft excel VBA,我可以使用 theSelection.Offset(0,1) 之类的东西,但事实并非如此。所以我当然正在做一些解决方法:

nextCell = oActiveSheet.getCellByPosition( ???currentColumn + 1, ???currentRow)
ThisComponent.CurrentController.select( nextCell )

我只想知道将这些??? 替换为theSelection var 的实际值以移动到右侧的下一列的最简单方法。

我也试过这个:

nextCell = oActiveSheet.getCellByPosition( column() + 1, row())

但我不知道为什么它总是返回column() = 1row() = 1,不管CurrentSelection 的值是哪个。提前感谢您的帮助。

【问题讨论】:

交叉发布到ask.libreoffice.org/en/question/250774/…。 【参考方案1】:

获取单元格地址。

Sub ChangeAndThenGoToCellToRightOfSelection
    oActiveSheet = ThisComponent.getCurrentController().getActiveSheet()
    oSels = ThisComponent.getCurrentSelection()
    If oSels.supportsService("com.sun.star.sheet.SheetCell") Then
        'A single cell is selected.
        oSels.setString("some value")
        address = oSels.getCellAddress()
        nextCell = oActiveSheet.getCellByPosition(address.Column + 1, address.Row)
        ThisComponent.CurrentController.select(nextCell)
    End If
End Sub

要查看对象可以做什么,请使用 XrayTool 或 MRI 等自省工具。

【讨论】:

以上是关于从 libreoffice calc basic 中的“ThisComponent.CurrentSelection”获取行号和列号的主要内容,如果未能解决你的问题,请参考以下文章

在 Basic 中计算自己的对数(LibreOffice Calc Macro)

Libreoffice Calc Basic 如何通过代码附加 2 个小数位

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

Libreoffice calc 宏将当前日期 + 14 天放入单元格

从 LibreOffice Calc 工作簿导入

是否可以从 OPEN Libreoffice Calc 文件中读取数据?