如何在 LibreOffice Writer 的 table 公式中使用 BeanShell 方法作为函数?

How to use BeanShell method in LibreOffice Writer's table formula as function?

我在这个问题上苦苦挣扎了一段时间,但我无法在线找到任何解决方案。我得到的最接近的是如何编写可以在 Calc 的公式中使用的 Basic 函数,但是由于 Basic 和 BeanShell 是完全不同的语言,所以我找不到合适的 syntax/procedure 在后一种语言中实现相同的功能。

在 Writer 中可以有一个 table(不是电子表格——只是普通的 table),您可以在单元格上按 F2 并输入一些公式,例如=<C2>*<E2> 计算 C2 和 E2 单元格中值的乘积。

我编写了 BeanShell 方法 String amountInWords(String amount, String currency),它将传递的 amount(例如 1,234.59)和 currency(例如“USD”)转换为单词(one thousand two hundred thirty four dollars, fifty nine cents ).现在我想在某些单元格上按 F2 键并键入 =amountInWords(<Table2.D3>, "USD") 之类的公式,然后将上述输出视为单元格内容。不幸的是我收到 ** Expression is faulty ** 消息。

有人可以告诉我如何以描述的方式使用此方法,或者确认这是不可能的吗?非常感谢您!

Writer table 公式比电子表格公式更受限制。 http://libreoffice-dev.blogspot.com/2019/11/calculations-inside-of-writer-tables.html 中有支持的函数列表。不支持 AFAIK 调用宏。

可能您想要的而不是 table 是通过转到 插入 -> 对象 -> OLE 对象[=21= 将 Calc 电子表格嵌入到 Writer 文档的该位置].然后将 amountInWords 重写为基本用户定义函数 (UDF)。

如果您必须使用 BeanShell,则编写一个加载和调用 BeanShell 方法的 Basic UDF。或者您可以创建一个 BeanShell Calc 加载项,尽管这更困难,需要 XML 个配置文件。对于加载项,用 Java 编写可能比 BeanShell 更容易,因为有更多示例和文档可用。

或者,不嵌入电子表格,而是在 BeanShell 中创建一个搜索和替换 Writer 宏,在 table 中执行任何需要的计算。在打开文档等事件中将宏设置为 运行。