Python UNO and Threads



我正在使用"internal"(Libreoffice是主机进程)版本使用Python UNO,其中Python解释器位于Libreoffice/Openoffice中。我想使代码非阻塞...也就是说,一旦代码被调用为宏,它就会启动第二个线程并将主线程返回到 Office,以便在继续运行非常长的过程(10-20 分钟的执行时间)时不会阻塞 UI。

当我尝试这样做时,LibreOffice永远冻结了。我几乎在任何地方都搜索过,但除了在第二个线程中导入 scipy 然后在等待该线程时阻塞的奇怪引用(myrhread.join()),似乎没有任何地方可以做到这一点。

或者,是否可以创建一个新的服务管理器,以便

我可以调用第二个进程,然后链接回服务管理器,以便我可以以正常方式返回 LibreOffice,而不会用"幽灵线程"锁定它?

经过大量挖掘,我在这里找到了答案:

自由办公室论坛线程示例

对于简单的长时间运行的任务,否则它会阻塞 UI 线程,这非常有效。相关代码如下:

从线程导入线程从时间导入睡眠进口UNOt = 无def test_worker(doc):    # 等待 30 秒进行演示    睡眠(30)    # 获取文档中的第一张工作表并将文本插入单元格 A1    .doc。Sheets.getByIndex(0).getCellByPosition(0,0).字符串 ="我回来了"def delayedRun(*args):    全球 T    doc = XSCRIPTCONTEXT.getDocument()    t = 线程(目标 = test_worker,参数 = (文档,))    t.start()g_exportedScript = 延迟运行,

最新更新