Запуск макросов из С++ кода

В данной статье рассмотрена возможность запуска макросов из С++. В процессе работы с макросами используются интерфейсы XScriptProvider, XScriptProviderSupplier  и XScript.

XScriptProvider

Интерфейс XScriptProvider позволяет получить доступ к макросам.

Пример использования:

//Cоздание объекта  XScriptProvider   с использованием сервиса "com.sun.star.script.provider.MasterScriptProvider"
Reference <XScriptProvider> xScriptProvider(xContext->getServiceManager()->createInstanceWithContext("com.sun.star.script.provider.MasterScriptProvider", xContext), UNO_QUERY_THROW);
//Перемменная с URI макроса
OUString macroUrl = "vnd.sun.star.script:" + macroPath + "?language=" + macroLanguageName + "&location=" + macroLocationName;
//Получаем объект XScript с объектом макроса.
Reference <XScript> xScript(xScriptProvider->getScript(macroUrl));

Методы интерфейса  XScriptProvider:


  • getScript(sScriptURI) - возвращает объект XScript, содержащий указанный макрос.
Параметры:
  • string sScriptURI - URI макроса. 
sScriptURI имеет следующий формат:

vnd.sun.star.script:<имя_макроса>$<вызываемая_функция>?language=<язык>&location=<место_расположения>

где:

- `<имя_макроса>` - имя файла макроса, включая расширение файла. Например, "my_script.py".

- `<вызываемая_функция>` - имя функции внутри макроса.

- `<язык>` - язык, на котором написан макрос. Например, "Python".

- `<место_расположения>` - место расположения скрипта. Могут быть следующие значения:

  • user - для макросов, находящихся в пользовательской директории.
  • user:uno_packages -  для макросов, находящихся в пользовательской директории в расширении.   
  • share - для макросов, находящихся в общей директории. 
  • share:uno_packages - для макросов, находящихся в общей директории в расширении.
  • document - для макросов, расположенных в документе. 
Возвращаемое значение: XScript

XScriptProviderSupplier

Интерфейс XScriptProviderSupplier предоставляет доступ к провайдеру сценариев.

Пример использования:

// Получаем ссылку на XTextDocument из XComponent

Reference<XTextDocument> xDoc(xComponent, UNO_QUERY_THROW);

//Получаем объект  XScriptProviderSupplier

Reference <XScriptProviderSupplier> xScriptProviderSupplier(xDoc, UNO_QUERY_THROW);

//Получаем объект  XScriptProvider

Reference <XScriptProvider> xScriptProvider(xScriptProviderSupplier->getScriptProvider(), UNO_QUERY_THROW);


Методы интерфейса  XScriptProviderSupplier:


  • getScriptProvider() - возвращает провайдер сценариев объекта.
Параметры:
-
Возвращаемое значение: XScriptProvider

XScript

Этот интерфейс предназначен для вызова сценария или функции в AlterOffice.

Пример использования:

//Получаем объект макроса

Reference <XScript> xScript(xScriptProvider->getScript(macroUrl));

//Создаем параметры метода invoke()

Sequence <Any> macroArguments;

Sequence <short> macroOutputArgumentIndices;

Sequence <Any> macroOutputArguments;

 

Any macroReturn;

//Вызов макроса

macroReturn = xScript->invoke(macroArguments, macroOutputArgumentIndices, macroOutputArguments);


Методы интерфейса  XScript:


  • invoke(aParams,  aOutParamIndex,  aOutParam) - вызывает сценарий или функцию. Возвращает значение вызываемого макроса или функции.
Параметры:
  • sequence< any >  aParams - аргументы макроса.
  • sequence< short >  aOutParamIndex - содержит индексы выходных или inout параметров в списке аргументов макроса.
  • sequence< any >  aOutParam - выходные параметры.
Возвращаемое значение: any


Ниже приведены примеры на языке С++, демонстрирующие функционал описанных выше интерфейсов. В этих примерах происходит вызов макроса Python, который находится в документе и в области пользователя.
Прикреплённые файлы
invoke_in-document_macro.cpp
404kb
invoke_non-in-document_macro.cpp
404kb