Функция openoffice calc python не изменяет лист - PullRequest
2 голосов
/ 08 марта 2019

Я определил функцию hellotest, определенную ниже, которая будет выполняться в OpenOffice calc. Эта функция просто записывает слово Hello в ячейку (3,4). Лист изменяется, когда функция выполняется как макрос, но ничего не происходит, когда функция выполняется через базовую функцию с именем HELLOTEST (см. Ниже). Кажется, что функция python вызывается как строка «Hello world», которую она возвращает, отображается в вызывающей ячейке, но ячейка (3,4) не изменяется. Должен ли я понимать, что функция python может быть выполнена только как макрос, или я должен использовать XSCRIPTCONTEXT по-другому?

Python:

import uno

def hellotest():
   oSheet = XSCRIPTCONTEXT.getDocument().getSheets().getByIndex(0)
   oCell1 = oSheet.getCellByPosition(3,4) 
   oCell1.setString("Hello world")
   return "Hello world"

Основная функция:

REM  *****  BASIC  *****
REM Keep a global reference to the ScriptProvider, since this stuff may be     called many times:
Global g_MasterScriptProvider

REM Specify location of Python script providing the cell functions:
Const URL_Main = "vnd.sun.star.script:hellotest.py$"
Const URL_Args = "?language=Python&location=user"

Function getMasterScriptProvider()
   if NOT isObject(g_MasterScriptProvider) then
      oMasterScriptProviderFactory =     createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
      g_MasterScriptProvider = oMasterScriptProviderFactory.createScriptProvider("")
   endif
   getMasterScriptProvider = g_MasterScriptProvider
End Function

Function HELLOTEST(s$, optional iLen%)
   sURL = URL_Main & "hellotest" & URL_Args
   oMSP = getMasterScriptProvider()
   oScript = oMSP.getScript(sURL)
   x = oScript.invoke(Array(),Array(),Array())
   HELLOTEST = x
End Function`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...