0

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

在 Writer 中可以有一个表格(不是电子表格——只是普通表格),您可以在单元格上按 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 **消息。

请有人给我建议,如何以所描述的方式使用这种方法,或者确认这是不可能的?非常感谢您!

4

1 回答 1

0

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

可能您想要的不是表格,而是通过转到Insert -> Object -> OLE Object将 Calc 电子表格嵌入到该位置的 Writer 文档中。然后重写amountInWords为 Basic 用户定义函数 (UDF)。

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

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

于 2021-02-11T15:15:12.567 回答