Sup*_*est 5 python macros libreoffice-calc
由于 LibreOffice Calc 支持宏,而且内置函数有些限制,我想用 Python 编写自己的函数,然后将它们用作单个单元格中的公式。理想情况下,我会有一个 Python 文件,如:
def VOL(a, b, c):
v = a*b*c
return v
Run Code Online (Sandbox Code Playgroud)
嵌入在文档中或作为custom_functions.py一个简单位置的文件。然后我就可以=VOL(A1, A2, B3)在一个单元格中写入并让它计算结果。错误的输入或其他错误应该在单元格中产生错误文本,与内置 calc 函数的工作方式相同。
我可以转到工具 > 宏 > 组织宏... > 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。
你问的有些事情很容易解决,有些则不然。首先是IDE。 APSO是一个现在可以使用的扩展,它提供了一个方便的菜单来编辑 Python 宏。
安装后,转到Tools -> Macros -> Organize python scripts。展开My Macros并转到Menu -> Create module。将其命名为“custom_functions.py”。
然后选择文件并转到Menu -> Edit。为此,您需要进入工具 -> 扩展管理器并告诉 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,
Run Code Online (Sandbox Code Playgroud)
要运行代码,请再次使用 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。
| 归档时间: |
|
| 查看次数: |
6213 次 |
| 最近记录: |