2

Я хочу запустить макрос LibreOffice для файла .odt из командной строки. Поскольку я хочу увеличить масштаб до применения макроса к нескольким файлам, я не хочу, чтобы GUI появлялся при каждом выполнении макроса.

В настоящее время у меня есть рабочий макрос (который также закрывает файл в конце), и, насколько я могу найти, я могу вызывать его следующим образом:

soffice --invisible --nofirststartwizard --headless --norestore "D:\myFolder\my file.odt" "macro:///Standard.Module1.myMacro"

или же

swriter --invisible --nofirststartwizard --headless --norestore "D:\myFolder\my file.odt" "macro:///Standard.Module1.myMacro"

Обе команды выполняют макрос правильно, однако GUI открывается и закрывается во время выполнения. Как мне это предотвратить?

Я работаю на компьютере под управлением Windows 10, и Справка> О LibreOffice предоставила следующую информацию:

Версия: 5.2.1.2
ID сборки: 31dd62db80d4e60af04904455ec9c9219178d620
Темы процессора: 4; Версия ОС: Windows 6.2; UI Render: по умолчанию;
Язык: en-US (en_US); Calc: CL

1 ответ1

2

Проблема в том, что, хотя LibreOffice невидим при запуске, он становится видимым после открытия документа. Существует решение по адресу https://forum.openoffice.org/en/forum/viewtopic.php?f=5&t=22548:

  1. Запустите LibreOffice без заголовка, чтобы вызвать макрос. Вызов командной строки не должен указывать документ для открытия, просто макрос. Например (используя более новый макрос-синтаксис):

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

  2. Макрос вызывает loadComponentFromUrl со свойством Hidden установленным в значение true. Это приведет к тому, что документ не станет видимым.

  3. Теперь макрос выполняет все, что он собирался сделать с документом.

РЕДАКТИРОВАТЬ:

Чтобы он работал для разных файлов, передайте имя файла в качестве параметра, используя более старый синтаксис макроса. Пример с https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=8232:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .