В данной статье рассмотрена возможность запуска макросов из С++. В процессе работы с макросами используются интерфейсы 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, который находится в документе и в области пользователя.