如何将单元格而不是单元格的值传递给 LibreOffice 函数?

Posted

技术标签:

【中文标题】如何将单元格而不是单元格的值传递给 LibreOffice 函数?【英文标题】:How to pass in a cell, not a cell's value, to LibreOffice function? 【发布时间】:2014-03-04 14:53:15 【问题描述】:

我希望用户能够选择单元格,然后让我的函数对这些单元格进行操作。

我该怎么做? "ByRef" 和 "as Object" 似乎做对了,但是 Excel/Libre,OpenOffice 拒绝函数调用,因为用户的输入不是对象。

有没有办法找出为要运行的函数选择了哪些单元格?

即使我必须执行诸如查找调用单元格的地址之类的操作,然后向后查找输入到该单元格中的单元格名称,这也可能有效。我愿意接受任何让我的用户像普通函数一样编写这个函数的解决方案,并且让这个函数能够修改选定的单元格。这就是我要说的:

Function SIMVOL( rF, ByRef mX, mY, cR, cS ) ' or Function SIMVOL(...mX as Object...)
    mX.value() = 10
    SIMVOL = mX.value() * mY
End Function

【问题讨论】:

不知道 Libre,OpenOffice ,但在 excel 中您不能使用 UDF 修改单元格内容(以正常方式) 我已经能够从文档对象中硬核地址和查找单元格引用。但是要将单元格作为参数,我的用户必须键入“A1”、“B1”等,而且他们无法用鼠标选择单元格 - 因为这些选择会解析为数据而不是地址。 【参考方案1】:

这是一个改编自 Andrew Pitonyak's OpenOffice Macro document 的示例。它应该让你朝着正确的方向前进。

Sub DivideSelectionByTen()
  REM Divide the current selection by 10
  Dim oData()
  Dim oRow()
  Dim i As Integer
  Dim j As Integer

  Dim oRange As object
  Dim dDivisor As Double

  oRange = ThisComponent.getCurrentController().getSelection()

  dDivisor = 10

  oData() = oRange.getDataArray()
  For i = LBound(oData()) To UBound(oData())
    oRow() = oData(i)
    For j = LBound(oRow()) To UBound(oRow())
      oRow(j) = oRow(j) / dDivisor
    Next
  Next
  oRange.setDataArray(oData())
End Sub

【讨论】:

以上是关于如何将单元格而不是单元格的值传递给 LibreOffice 函数?的主要内容,如果未能解决你的问题,请参考以下文章

垂直放置集合视图单元格而不是水平放置?

iOS画外音,如何跳过表格视图单元格而不是说“未启用”

Excel Vba 如何将单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?

双击datagridview中的行并获取特定单元格的值并将其传递给另一个表单

Swift 2.1 - 如何将集合视图单元格的索引行传递给另一个视图控制器

如何使用 executeReader() 方法仅检索一个单元格的值