在 LibreOffice Calc 单元格中使用 Python 函数作为公式

在 LibreOffice Calc 单元格中使用 Python 函数作为公式

由于 LibreOffice Calc 支持宏,而内置函数有些有限,因此我想用 Python 编写自己的函数,然后将它们用作各个单元格中的公式。理想情况下,我会有一个如下 Python 文件:

def VOL(a, b, c):
    v = a*b*c
    return v

要么嵌入文档中,要么作为custom_functions.py文件放在一个简单位置。然后我就可以=VOL(A1, A2, B3)在单元格中写入并让它计算结果。错误的输入或其他错误应该会在单元格中产生错误文本,就像内置计算函数所做的那样。

我可以转到工具 > 宏 > 组织宏... > LibreOffice Basic。这会给我一个对话框,我显然可以按照上面描述的方式创建一个新函数(我还没有测试过)。不幸的是,这似乎需要用 Basic 而不是 Python 编写。我真的不想只为此学习 Basic,我想利用我在 Python 方面的知识和经验。

如果我转到“工具”>“宏”>“组织宏...”>“Python”,则创建新宏的选项会变灰。在互联网上搜索了一番后,我发现 LibreOffice(实际上是上游 OpenOffice)显然“尚未”拥有自己的 Python IDE,因此他们只是在 UI 中放置了一个灰色按钮,没有任何解释作为占位符。我用引号说“尚未”,是因为我发现人们在 2012 年就抱怨过这个问题,结果被告知这个问题很快就会得到解决。

我还发现了一些关于使用某种 Python 互操作库编写 Python 扩展的信息。这似乎需要导入大量繁重的库,即使是最基本的示例也需要数十行复杂的样板代码,调试可能很麻烦。编写一个普通的 Python 脚本从电子表格中读取数据然后将其写回会容易得多。但是我想要的函数相对简单,能够有效地查看和导航数据对于开发和调试我的探索性分析非常有帮助,因此能够用简单的 Python 定义函数并在 Calc 电子表格中使用它将会非常方便。有办法做到这一点吗?

我使用的是 LibreOffice 5.2.2.2 和 Windows 7,我可以使用 Python 2 或 3,但更喜欢 3。

答案1

您问到的有些问题很容易解决,但有些问题就没那么容易了。首先是 IDE。 亚太人猿保护组织是一个现在可以使用的扩展,它提供了一个用于编辑 Python 宏的便捷菜单。

安装完成后,转到工具 -> 宏 -> 组织 Python 脚本。 扩张我的宏并转到菜单 -> 创建模块.将其命名为“custom_functions.py”。

然后选择文件并转到菜单 -> 编辑。要实现此功能,您需要进入工具 -> 扩展管理器并告诉 APSO 您最喜欢的文本编辑器的路径。我的设置为C:\Program Files (x86)\Vim\vim80\gvim.exe

在文本编辑器中,输入以下代码。

def VOL(a, b, c):
    v = a*b*c
    return v

def call_vol():
    oSheet = XSCRIPTCONTEXT.getDocument().getSheets().getByIndex(0)
    cell_a = oSheet.getCellRangeByName("A1")
    cell_b = oSheet.getCellRangeByName("A2")
    cell_c = oSheet.getCellRangeByName("A3")
    cell_result = oSheet.getCellRangeByName("B1")
    cell_result.setValue(
        VOL(
            cell_a.getValue(),
            cell_b.getValue(),
            cell_c.getValue()))

g_exportedScripts = call_vol,

要运行代码,请再次使用 APSO 或转到内置工具->宏->运行宏。 查找并执行该call_vol函数。例如,如果 A1 到 A3 中每个单元格都包含 2,则 B1 中将产生 8,因为 2 * 2 * 2 = 8。

现在,如何将此宏转换为电子表格函数?正确的方法是创建一个电子表格插件。我发现这样的功能效果很好,但是它确实需要几个 XML 配置文件,听起来您想避免这种情况。

创建插件的替代方法是用户定义函数. 这些只有在用 Basic 编写时才能调用。

对于核心工作在 Python 中完成的 UDF,在 Basic 中放置一个包装函数,从 Basic 调用 Python使用脚本提供程序。

在 Windows 上,LibreOffice 的最新版本通常附带 Python 3。Apache OpenOffice 附带的是 Python 2。

相关内容