我编写了一个OpenOffice / LibreOffice插件,用Java实现了一些自定义的Calc电子表格函数。其中一些函数创建Java对象,然后逻辑上与函数的结果相关联,因此也与使用该函数的单元格相关联。
(现在假设该函数是从单元格公式调用而不是从函数向导或其他某些上下文调用的。)
OpenOffice不告诉自定义函数调用它们的单元格,因此要弄清楚这种关联并不容易。如果函数的参数是单元格地址,则可以查看这些单元格并找到依赖于它们的单元格 - 这会缩小可能性。
如果它是一个字符串,可以在结果中包含Java对象的唯一键,但这很难看。然后,我可以定期扫描所有单元格,以确保唯一键仍然存在于一个或多个单元格中。
但是,该函数也可以嵌套在公式中的其他函数中,因此无法保证密钥最终在单元格的结果值中可见。
我正在寻找一种干净的方法来检测对象的逻辑引用已经消失(因为函数的实例是使用不同的args调用的,或者包含该函数的公式已被删除或更改)。
编辑: 返回一个XVolatileResult看起来很有希望,但是当删除一个公式时,从不调用removeResultListener()回调(除非在文档关闭时)。
更多澄清: 自定义函数实现为Uno组件的实例方法(单个组件上可能有多个自定义函数)。只创建了一个组件实例。
使用字符串或数字参数调用函数方法,该参数对应于电子表格公式中的参数。也可以将args作为单元格引用而不是值接收。
函数的结果是字符串或数值或XVolatileResult。无法返回任意Java对象。
我正在创建Java对象作为评估函数的副作用,我希望能够在其他单元格中的其他公式中引用这些对象。