Вызов Python из Basic

Вызов Python из Basic

  1. Создадим скрипт Python с названием test.py
  2. Наполним скрипт test.py пример макроса размещен в конце документа
  3. Перенесем его по нужному нам пути см. вкладку "Быстрый старт "
  4. Откроем ACell и перейдем по пути: Сервис -> Basic (см. изображение ниже)

5. В окне "Макросы Basic" -> выделяем "Standart" -> выберем вкладку "Управление" (см. изображение ниже)

6. Выделяем вкладку "Standart" -> Нажимаем "Создать..." (см. изображение ниже)

7. Вводим нужное имя -> Нажимаем "OK" (см. изображение ниже)

8. Закроем "Управление макросами Basic" (см. изображение ниже)

9. Выделяем созданный макрос (в момем случае "Module2") -> нажимаем "Правка" (см. изображение ниже)
10. В открывшемся окне вводим код Basic из "Примеры для вкладки "Вызов Python из Basic" -> Запускаем клавишой F5 или кнопкой "Выполнить F5" (см. изображение ниже)

Пример макроса Python test.py


#!/usr/bin/env python3
# coding: utf-8 -*-

import uno
from datetime import datetime
from com.sun.star.awt.MessageBoxType import INFOBOX
from com.sun.star.awt.MessageBoxButtons import BUTTONS_YES_NO_CANCEL, DEFAULT_BUTTON_YES

def msgbox(msg=None, title=None):
   if msg is None:
       msg = "HELLO WORLD"
   else:
       msg = msg

   if title is None:
       title = "ТЕСТОВОЕ ДИАЛОГОВОЕ ОКНО"
   else:
       title = title

   ctx = uno.getComponentContext()
   smgr = ctx.getServiceManager()
   tk = smgr.createInstance("com.sun.star.awt.Toolkit")
   dtp = smgr.createInstance("com.sun.star.frame.Desktop")
   frame = dtp.getCurrentFrame()
   win = frame.getComponentWindow()
   mtyp = INFOBOX
   btn = BUTTONS_YES_NO_CANCEL + DEFAULT_BUTTON_YES
   mb = tk.createMessageBox(win, mtyp, btn, title, msg)

   return mb.execute()

def test():
   return msgbox(
           title="Информация",
           msg=f"Дата и время: {datetime.now()}"
   )

g_exportedScripts = (test,)

Пример макроса Basic

REM  *****  BASIC  *****

Function test
oScriptProvider = ThisComponent.getScriptProvider()
oScript = oScriptProvider.getScript("vnd.sun.star.script:test.py$test?language=Python&location=user")
test = oScript.invoke(array(), array(), array())
End Function
Прикреплённые файлы
Basic.vba
404kb
test.py
404kb