*BASIC* Запуск (исполнение) макроса во внешнем фа&#

Автор maksvlad, 4 мая 2018, 16:41

0 Пользователи и 1 гость просматривают эту тему.

maksvlad

Движение мысли в реализации автоматизации рутинных задач мои сотрудников привело к вопросу, как запустить макрос во внешнем файле. Результатами поиска по теме и спешу поделиться.
1. Запуск файла из макроса LO

'Определяем наши переменные
Dim scriptProvider, s, resultDoc, sPath
sPath="/home/user/SuperMacros.odt"
Dim Args(1) As new com.sun.star.beans.PropertyValue
'Настраиваем массив PropertyValue, необходимый для открытия файла
Args(0).Name = "MacroExecutionMode" 'Определяет политику выполнения макросов, шоб не ругался
Args(0).Value = 4
Args(1).Name = "Hidden" 'Откроем файл скрыто от пользователя
Args(1).Value = False
resultDoc = StarDesktop.loadComponentFromUrl(ConvertToURL(sPath),"_blank",0,Args) 'открываем файлик с нужным нам макросом (откроется скрытно, см выше)
resultDoc.BasicLibraries.loadLibrary("Standard") 'загружаем библиотеку из каталога объектов (в нашем случае — это  Standard, но может быть любой другой
Set scriptProvider = resultDoc.getScriptProvider() '
s = scriptProvider.getScript("vnd.sun.star.script:Standard.Module1.FieldsToText?language=Basic&location=application") 'выбираем для запуска макрос FieldsToText.
'В иерархии каталога объектов он соответственно находится Standard>Module1>FieldsToText.
'location определяет место нахождения объекта =application — макросы сохранены в профиле текущего пользователя,
' =document — сохранены текущем документе
s.invoke(array(), array(), array()) 'запускаем макрос.

Естественно, что макрос будет исполняться относительно файла, определенного переменной sPath.
2. В дополнение, найденные способы запуска макроса в файле из командной строки.
Сам пока не использовал, но для раскрытия темы следует указать.
Подробнее https://superuser.com/questions/1135850/how-do-i-run-a-libreoffice-macro-from-the-command-line-without-the-gui

soffice "macro:///Library3.Module1.test_Args(arg1,123,4.567,2000-12-31)"



soffice -headless -invisible "vnd.sun.star.script:Standard.Module1.MySubroutine? language=Basic&location=application"


UPD.
К вопросу данного топика: Как вызвать функцию в ячейке из собственной библиотеки модулей? от Владислава Орлова (АКА) JohnSUN, за что ему отдельная благодарность

P.S. Топик в развитие мыслей темы Стандартные методы - примеры использования – поиск?