分段故障打开Calc电子表格

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

我需要处理由许多单独的工作表组成的 Calc 电子表格。 Wiki 有一个详细的 Python 指南,我正在关注。我安装了

libreoffice-script-provider-python
软件包,并且能够毫无错误地导入
uno
软件包。然而,每次调用
create_instance
函数时,解释器都会因分段错误而崩溃。下面是一个小例子:

import uno

CTX = uno.getComponentContext()
SM = CTX.getServiceManager()

def create_instance(name, with_context=False):
    if with_context:
        instance = SM.createInstanceWithContext(name, CTX)
    else:
        instance = SM.createInstance(name)
    return instance

path = uno.systemPathToFileUrl('/home/user/temp/test.ods')
desktop = create_instance('com.sun.star.frame.Desktop', True)
doc = desktop.loadComponentFromURL(path, '_default', 0, ())

如何使用

uno
打开 Calc 电子表格?

设置:

  • 操作系统:Ubuntu 22.04
  • Python:2012 年 10 月 3 日
  • LibreOffice:7.3.7

更新:一个更小的示例的日志。提前启动 Calc 并不会真正改变结果,而是为了完成而添加。

$ soffice --calc --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
$ python3
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import uno
>>> CTX = uno.getComponentContext()
>>> SM = CTX.getServiceManager()
>>> name='com.sun.star.frame.Desktop'
>>> instance = SM.createInstanceWithContext(name, CTX)

Segmentation fault (core dumped)
python libreoffice libreoffice-calc uno pyuno
1个回答
0
投票

好吧,我使用了你的设置(Ubuntu 22.04,Python 3.10,LO 7.3.7),事实上,问题中列出的代码确实产生了分段错误。

但看来您甚至没有尝试过该教程! 🙁 需要解析器才能连接到正在运行的 LibreOffice 实例。

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")

您找到的代码不适合与该设置一起使用。当从 LibreOffice 作为宏运行时,它可以工作,其中

XSCRIPTCONTEXT
可用。

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