Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

17 Декабрь 2018, 22:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: *BASIC* Запуск (исполнение) макроса во внешнем фа&#  (Прочитано 449 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maksvlad
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Иркутск
Сообщений: 150


« Стартовое сообщение: 4 Май 2018, 16:41 »

Движение мысли в реализации автоматизации рутинных задач мои сотрудников привело к вопросу, как запустить макрос во внешнем файле. Результатами поиска по теме и спешу поделиться.
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. Топик в развитие мыслей темы Стандартные методы - примеры использования – поиск?
« Последнее редактирование: 4 Май 2018, 17:51 от maksvlad » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!