设置Python环境来控制libre calc

问题描述 投票:0回答:1

我在 Libre Calc 中有一个模型,我想通过 python 和 Jupyter Notebook 以编程方式访问/控制该模型。

这样做的原因是我想使用 python 下载可以输入 Calc 模型的数据,然后将模型输出返回到 jupyter 笔记本,我可以在其中执行额外的分析(自动)。

我直接通过终端安装了libre office和Jupyter笔记本。

我已将 libre office 设置为聆听模式。

当我在虚拟环境之外执行此操作时,我可以通过 jupyter Notebook 与 Calc 进行通信(它成功运行)。

我面临的问题是我无法安装任何其他所需的软件包,例如pandas、yfinance、scipy 等通过 pip - 我收到有关“外部环境”的错误消息以及使用虚拟环境的建议。

我使用的是运行树莓派操作系统(64 位)的树莓派 4。最新版本的libre Office和python3。

我尝试创建一个虚拟环境并在其中安装jupyter笔记本以及各种软件包。当我访问 jupyter 笔记本时,我可以导入包,例如熊猫,没有问题。但是,我无法再与 libre Calc 通信并收到有关未找到 Uno 模块的错误。

我不认为我需要安装 uno/pyuno,因为它工作得很好,无需在虚拟环境之外这样做(我相信这是通过 libre office - pyuno 桥预安装的)。

我在终端(虚拟环境)和 Jupyter 笔记本中运行了 import sys / sys.executable 和 said.path ,它们是相同的。我还在 jupyter 和终端中运行了 pip list,我可以看到环境是相同的。

因此,我只能在虚拟环境之外连接到 libre office,但无法访问所需的软件包,或者可以访问虚拟环境中的软件包,但无法连接到 libre office。

任何想法将不胜感激(我是新手,所以提前道歉)。

jupyter-notebook pip libreoffice-calc pyuno
1个回答
0
投票

我一点击“提交”就发现了丢失的链接。为了使面临类似问题的任何人受益,我列出了创建所需虚拟环境所采取的步骤。缺少的链接是 oooenv https://pypi.org/project/oooenv/。我现在可以使用 Python 和 Jupyter Notebook IDE 以编程方式访问 Libre Calc,并访问通过 pip 安装的包。希望这也适用于其他人。

在 Raspberry Pi 4 上全新安装 Raspberry Pi OS 64 位。

启用远程桌面

sudo apt-get install xrdp
# 允许通过 Microsoft 远程桌面应用程序进行远程访问

更新/升级软件/固件

sudo apt-get update

sudo apt-get upgrade

sudo apt-get autoclean

安装 Libre Office

sudo apt-get install libreoffice

sudo apt-get install libreoffice-script-provider-python
# 不应该是必需的,因为应该已经随 Libre Office 一起安装了

将 Libre Office 置于无头聆听模式(通过虚拟环境之外的终端)

libreoffice --headless --invisible --norestore --nolockcheck --accept="socket,host=localhost,port=2002;urp;"

创建虚拟环境

python3 -m venv myenv
'source myenv/bin/activate' # 激活虚拟环境(输入“deactivate”退出 VE)

安装 Jupyter 笔记本

pip install jupyter
# 在虚拟环境中

根据需要安装更宽的软件包

pip install pandas numpy seaborn matplotlib scipy
# 在虚拟环境中

将 Libre UNO 链接添加到虚拟环境(在虚拟环境内)

pip install oooenv

oooenv cmd-link -a

请注意,不应安装 Pyuno / Uno / Unotools 软件包 - 这些软件包将与 Libre Office 预安装的 PYUNO-Bridge 发生冲突。

访问 Jupyter Notebook

jupyter notebook
# 在虚拟环境中

用于访问 Libre Calc 并创建新文档的 Jupyter Notebook 脚本

import uno

from com.sun.star.beans import PropertyValue

from com.sun.star.uno import Exception

连接到 LibreOffice Calc

localContext = uno.getComponentContext()

resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)

ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")

smgr = ctx.ServiceManager

desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)

创建一个新的 Calc 文档

calc_doc = desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, ())

访问活动工作表

sheets = calc_doc.getSheets()
sheet = sheets.getByIndex(0)

对工作表执行某些操作(例如写入数据)

cell = sheet.getCellByPosition(0, 0)
cell.setString("Hello, from Jupyter!")

保存文档

calc_doc.storeAsURL("file:///home/user/Desktop/output_file.ods", ())

关闭文档

calc_doc.close(True)

© www.soinside.com 2019 - 2024. All rights reserved.