通过 Python 脚本更新之前打开的 LibreOffice 电子表格而不关闭 LibreOffice

Posted

技术标签:

【中文标题】通过 Python 脚本更新之前打开的 LibreOffice 电子表格而不关闭 LibreOffice【英文标题】:Updating a previously opened LibreOffice spreasdsheet via Python script without closing LibreOffice 【发布时间】:2012-04-26 00:12:20 【问题描述】:

我有一个 LibreOffice 电子表格 (data.ods),其中包含 30 列中大约 500 行逗号分隔的值。第一行包含列标题。

Data.ods 由脚本全天定期更新。然后,我在另一个电子表格 (main.ods) 中有几个指向 data.ods 中单元格的链接。

我目前正在做以下事情:

1) 使用 Python 脚本生成 data.ods。

2) 打开 data.ods,以便 LibreOffice 对逗号分隔值进行文本导入以填充行。

3) 打开 main.ods(它会自动更新链接)。

我目前无法简单地让 main.ods 保持打开状态,因为即使在关闭 data.ods 之后,LibreOffice 似乎仍然对该文件有某种锁定,并且在我关闭之前不允许我的脚本编辑 data.ods完全 LibreOffice(要求我关闭 main.ods)。

我想做以下事情:

1) 打开 main.ods。

2) 通过脚本生成data.ods。

3) 使用 Edit...Links...Update Values 将更新后的值导入 main.ods。

4) 让 main.ods 保持打开状态。

5) 通过脚本生成新的data.ods。

6) 使用 Edit...Links...Update Values 将更新后的值导入 main.ods。

7) 必要时重复。

【问题讨论】:

显示您目前的情况并告诉我们问题出在哪里。否则,听起来您是在要求我们为您编写代码!这会很愚蠢。 对于处理过 LibreOffice 和脚本的人来说,这个问题非常清楚。这不是需要代码,而是知道要走哪条路。 【参考方案1】:

您可能知道,有一些方法可以通过 Python 脚本处理 Open/Libre Offie。它甚至附带了自己的 Python 解释器。

问题在于如何做到这一点的文档很糟糕 - 但其中一项功能就是让一个外部运行的 Python 脚本来访问在界面上打开的文档(如电子表格),并添加值给它。

它很慢,但运行良好 - 因为您只是在谈论几百行,所以速度无关紧要。

现在,让我尝试查找相关文档,并为您提供一个入门链接: http://www.openoffice.org/udk/python/python-bridge.html#modes

如果您将示例代码粘贴到 Python 交互式提示中(需要是随 LibreOffice 安装的 Python),您将能够使用 Python 的 dir 内省可用的方法和属性,并找出方法调用从脚本编辑单元格内容。

【讨论】:

谢谢,这对我来说似乎是正确的道路。如果我有任何进一步的问题,我会报告。 如果基础数据电子表格是 CSV,则使用文件...重新加载是一个简单的解决方案。 Quiteausername 的回答对我来说并不完全清楚。经过研究,我发现这种方法非常适合这种情况。 blog.louic.nl/?p=622 Python 导出到 csv,csv 链接到 ods 文件中的一个工作表,另一个工作表被标记以从链接的工作表中提取数据。重新加载需要被触发,并且有多种简单的方法可以做到这一点。【参考方案2】:

正如 jsbueno 所提到的,您可以使用 uno 模块在文档打开时在文档上运行 Python(并且它不会阻止手动编辑文档)。

同意文档目前是垃圾。我正在尝试在www.documenthacker.com / http://documenthacker.wordpress.com 做一些事情,但专注于 Writer。然而,这些程序是相似的,您可能会发现打开文档、导航文档等的方法很有用 - 一旦您开始使用 Python 编程 LibreOffice/OpenOffice,解决下一个问题就变得相当容易了。

在互联网上,Java 中的示例通常比 Python 中的示例多,不幸的是,如何在示例之间进行翻译只是半清楚的(在我的文档的待办事项列表中)。好消息是 Python 方式通常要简单得多。

【讨论】:

以上是关于通过 Python 脚本更新之前打开的 LibreOffice 电子表格而不关闭 LibreOffice的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Libre Office 中打开文件并将其保存为 .doc 文件?

如何使用 bash 脚本从许多 excel/Libre Office Calc 表中提取数据?

打开/Libre Office 宏以滚动视图到选择

怎么把libre表格顶端固定

Python3 - Docker部署Libre Office Online在线文件转换

Python3 - Docker部署Libre Office Online在线文件转换