Внимание! Написание макроса выполнялось в LibreOffice 4.4.3.2 и Windows XP.

Запустите LibreOffice Calc. Выберите пункт меню Сервис -> Макросы -> Управление макросами -> LibreOffice Basic


В окне Макросы Libre Office BASIC в поле "Имя макроса" пишем "Main". В поле "Макрос из" выбираем "Мои макросы" - "Standard" и нажимаем кнопку "Создать". Смотрите рисунок 1.

Рисунок 1. Окно макросы LibreOffice Basic


В окне Новый модуль задаем название "Module1" и нажимаем кнопку "OK". Смотрите рисунок 2.

Рисунок 2. Создание нового модуля

Рисунок 3. Редактор макросов LibreOffice Basic

Сам модуль Module1 с главной процедурой Main у нас созданы. Чтобы создать диалог выберите в редакторе макросов LibreOffice Basic пункт меню Сервис -> Макросы -> Управление диалогами...

Выбираем вкладку "Диалоги". В разделе "Диалог" выбираем "Мои диалоги" -> "Standard" и нажимаем кнопку "Создать". Смотрите рисунок 4.

Рисунок 4. Создание диалога макроса

В окне Новый диалог задаем название "Dialog1" и нажимаем кнопку "OK". Смотрите рисунок 5. Потом кнопку "Закрыть" окна Управление макросами LibreOffice Basic.

Рисунок 5. Создание нового диалога

Далее в окне редактора макросов LibreOffice Basic дважды нажимаем на нашем только что созданом диалоге с именем "Dialog1", смотрите цифру 1 на рисунке 6. После этого откроется визуальный редактор диалога, смотрите цифру 2 на рисунке 6.

Рисунок 6. Редактор диалога LibreOffice Basic

Теперь перенесите на наш диалог визуальный элемент под именем метка и визуалный элемент кнопка. Визуальные элементы можно перетащить из панели визуальных элементов, смотрите цифру 3 на рисунке 6.

Если выделить визуальный элемент Метку, то откроется набор свойств данного элемента. Через эти свойства можно настроить элемент. Присвоим имя lblNow элементу метка и текст оставим пустым. Для элемента кнопка имя присвоем OKButton и текст зададим OK. Смотрите цифры 1,2,3 рисунка 7.

Рисунок 7. Добавление визуальных элементов в редакторе диалогов LibreOffice Basic

Как я писал выше, модуль Module1 с главной процедурой Main создана (смотрите рисунок 8), но она еще не заполнена.

Рисунок 8. Добавляем исходный код макроса


Процедура Main является основной, в ней мы загружаем диалоговое окно с именем Dialog1, это следующие строчки кода:

DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)

Формируем строку с текущей датой и временем, это следующие строчки кода:

Dim strNow As String
strNow = Format(Now(), "yyyy-mm-dd ")
strNow = strNow + Format(Time(), "hh:mm")

Присваеваем строку с датой и временем визуальному элементу метка с именем lblNow, это следующие строчки кода:

Dim clblNow As Object
clblNow = Dlg.getControl("lblNow")
clblNow.Text = strNow

Последней строчкой кода в процедуре Main мы выполняем диалоговое окно с именем Dialog1:

Dlg.Execute()

Есть еще одна процедура, ее имя OKButton_execute, это событийная процедура, она выполняется в момент нажатия кнопки с именем OKButton, и выполняет она закрытие диалогового окна с именем Dialog1, это следующая строчка кода:

Dlg.endExecute()

Теперь присвойте процедуру с именем OKButton_execute кнопке с именем OKButton как событие на "Отпускание клавишы мыши". Для этого откройте визкальный редактор диалога Dialog1, смотрите цифру 1 на рисунке 9. Выделите Кнопку с именем OKButton и перейдите на вкладку "События", смотрите цифру 2 на рисунке 9. В событие "Отпускание клавиши мыши" укажите процедуру с именем OKButton_execute, нажав конопку с тремя точками, смотрите цифру 3 на рисунке 9.

Рисунок 9. Назначение события кнопке ОК

Все необходимое для запуска макроса мы сделали. Для начала посмотрим что у нас делает макрос. Под цифрой 2 рисунка 10 вы видите созданное диалоговое окно с отображаемой текущей датой и временем. Если нажать кнопку OK, то диалоговое окно закроется.

1. Запуск макроса из редактора макросов LibreOffice Basic.Откройте в редакторе макросов LibreOffice Basic наш код и выполнтите его нажав клавишу F5 или нажав на кнопку выполнения макроса, смотрите цифру 1 рисунка 10.

2. Запуск макроса из диалогового окна "Выбор макроса", смотрите цифру 1 на рисунке 11. В диалоговом окне нам нужно выбрать наш макрос и нажать кнопку "Выполнить", смотрите цифру 2 на рисунке 11.

Рисунок 11. Запуск макроса из диалога "Выбор макроса"

3. Запуск макроса из меню и подменю в приложениях LibreOffice Calc или LibreOffice Writer, смотрите цифру 0 рисунка 12. Для создания меню и подменю выберите пункт меню "Сервис" и подменю "Настройка", смотрите цифры 1 и 2 рисунка 12. В диалоговом окне "Настройка" на вкладке "Меню" нажмите кнопку "Создать...", введите имя нашего меню (например "Макросы"), смотрите цифру 3 рисунка 12. Чтобы создать подменю нашего меню "Макросы" нажмите кнопку "Добавить..." (смотрите цифру 4 рисунка 12.).

Рисунок 12. Запуск макроса из меню и подменю в приложениях LibreOffice Calc или LibreOffice Writer

Потом в диалоговом окне "Добавить команды" выберите команду которая будет выполнятся при выборе нашего подменю (смотрите цифры 1 и 2 рисунка 13), т.е. мы выбираем наш макроc с именем Main.

Рисунок 13. Добавляем команду для подменю

Переименуйте наше подменю выбрав пункт меню "Переименовать..." кнопки "Изменить" диалогового окна "Настройка" вкладки "Меню" (смотрите цифры 1,2,3,4 рисунка 14). Подменю назовите "Макрос окно с датой".

Рисунок 14. Переименование подменю

4. Запуск макроса в приложениях LibreOffice Calc или LibreOffice Writer по нажатию сочетания клавиш на клавиатуре. Для это откройте диалог "Настройка" и выбирите вкладку "Клавиатура" (смотрите цифру 1 рисунка 15). Потом выбираем команду, которая является нашим макросом с именем "Main" (смотрите цифру 2 рисунка 15). Потом выбираем свободную комбинацию клавиш и назначаем их нашей команде, т.е. макросу с именем Main (смотрите цифры 3,4,5 рисунка 15).

Рисунок 15. Назначение комбинации клавиш для запуска макроса

5. Запуск макроса в приложениях LibreOffice Calc или LibreOffice Writer по нажатию кнопки на панели инструментов (смотрите цифру 4 рисунка 16). Для создания кнопки на панели инструментов выберите пункт меню "Сервис" и подменю "Настройка", смотрите цифру 1 рисунка 16. В диалоговом окне "Настройка" на вкладке "Панели инструментов" нажмите кнопку "Создать...", введите имя нашей панели инструментов (например "Панель макросов"), смотрите цифру 2 рисунка 16. Чтобы создать кнопку на панели инструментов нажмите кнопку "Добавить..." (смотрите цифру 3 рисунка 16).

Рисунок 16. Запуск макроса из панели инструментов

Потом в диалоговом окне "Добавить команды" выберите команду которая будет выполнятся при нажатие по нашей кнопке нашей панели инструментов (смотрите цифры 1 и 2 рисунка 13), т.е. мы выбираем наш макроc с именем Main.

Переименуйте нашу кнопку нашей панели инструментов выбрав пункт меню "Переименовать..." кнопки "Изменить" диалогового окна "Настройка" вкладки "Панели инструментов" (смотрите цифры 1,2,3,4 рисунка 17). Кнопку назовите "Макрос окно с датой".

Рисунок 17. Переименование кнопки панели инструментов

Инвайт получен. :)

Привет, хабражители!
Сегодня я хочу Вам рассказать об использовании макросов в LibreOffice.

Предисловие
Каждый день дома и на работе мы пользуемся офисными приложениями для выполения каких-либо задач. Часто бывает так, что Вы специализируетесь на одной работе и в итоге выполняете одни и те же задачи: вставляете один и тот же текст, форматируете его, используя большое количество горячих клавиш. Во всех этих случаях можно сэкономить Ваше ценное рабочее время, автоматризировав некоторую Вашу работу.
Далее в статье я Вам расскажу об использовании макросов в LibreOffice.

Что же такое макросы и зачем они?

Макрос - это последовательность определенных действий, который можно записать с помощью обычного меню. Когда вы выбираете запись макроса, выполняемые вами действия автоматически сохраняются в виде кода скрипта. И в дальнейшей вашей работе он будет уже выполняться самостоятельно, в точности повторяя Ваши действия в программе. Макрос может быть как простым, так и очень сложным - все зависит от того, какой Вам необходимо добиться результат. Главные критерии, которые предъявляются к макросам - это быть мощным и одновременно простым в использовании. Макросы пакета LibreOffice отвечают именно таким требованиям. Давайте попробуем это на практике.

Для использования пакета LibreOffice, Вам нужно иметь предустановленную операционную систему Linux, Windows или MacOS, a так же установленный пакет LibreOffice (установить его можно, к примеру, из ppa-репозитиев, как описано в топике)

Управление макросами

Перед тем как мы приступим к созданию своего макроса, нам нужно познакомится с инструментом управления макросами. Переходим по пути Tools - Macros - Organize Macros - LibreOffice Basic Macros (Сервис - Макросы - Управление макросами - LibreOffice Basic Macros):

В левой колонке окна мы можем увидеть список установленных макросов по-умолчанию. Нажав на любой из них, можно его отредактировать либо удалить.
Главная задача окна - выбрать нужный Вам макрос, назначить ему кнопку на панели инструментов или связать его с каким-либо событием. Назначение макросу кнопки позволяет быстро выполнять наиболее часто используемые из них.

Хочу отметить, что создание макроса в автоматическом режиме (запись) предполагает хотя бы небольшое знание языка написания макросов, так как иногда нам понадобится его редактировать. Для того чтобы увидеть, как выглядит макрос, выбираем нужный нам макрос и нажимаем Edit (Редактировать). Ниже предоставлен пример, как выглядит макрос в исходном коде:

Возьмем простой пример. Мы имеем некий текст, уже вставленный в документ и нам нужно сделать заголовок для него, так как наш текст будет использоваться в деловой переписке.
Наш будущий макрос должен будет уметь:
- расположить текст наверху по центру страницы;
- ввести текст, который и будет использоваться в качестве заголовка.
После того, как создадим макрос, мы назначим ему кнопку на панели инструментов. После достаточно будет одного щелчка мыши, чтобы вставить заголовок в документ.
Выполним последовательность шагов.

Шаг 1.
Открываем текстовый документ. Перейдем Tools - Macros - Record Macro . Появится маленькое окно «Запись макроса» с одной единственной кнопкой «Завершить макрос» (Stop Recording ):

Шаг 2.
Создадим заголовок текста. Щелкнем мышью на кнопке «Center alignment» («По центру»), для того, чтобы наш будущий текст был именно по центру документа. Теперь пишем сам текст заголовка. Не стоит задавать различные форматы для него (шрифт или жирный/курсив/подчеркнутый), так как макрос не запоминает такие действия.

Шаг 3.
После того, как создание заголовка завершено, щелкните мышью на кнопке «Завершить макрос» окна «Запись макроса». Сразу появится окно Органайзера макросов. Задайте имя для нового макроса (например,PostHead). Теперь можно сохранить его в то место, где бы вы хотели (например, папка "My Macro ").

Шаг 4.
Теперь нам осталось добавить кнопку на панели инструментов для макроса PostHead . Процесс этот не так прост, как казалось бы на первый взгляд.
Открываем LibreOffice Basic Macros, нажимаем кнопку "Assign " («Назначить»). Появится следующее окно Customize , в котором нам следует перейти на вкладку Toolbars и убедиться в том, что в поле «Панель инструментов» стоит «Стандартная» (Standart ) .

Нажимаем в этом окне кнопку «Добавить» (Add ). Появится еще одно окно - «Добавление команд» (Add commands ).
В списке левого окна «Категории» (Category ) находим "LibreOffice Macros " (в самом низу списка). Открываем его и добираемся до нашего макроса. Как только нашли - осталось выполнить последний и самый простой шаг. Перетаскиваем мышью макрос Letterhead в то место панели инструментов, где бы мы хотели его видеть.
Все, с задачей справились.
Теперь все, что нам необходимо делать - это пользоваться кнопкой PostHead, которую мы добавили на панель. Например, открываем новый документ и нажимаем кнопку PostHead . Наш макрос создаст заголовок, именно с тем текстом, который мы «назначили» ему и разместит его наверху документа точно по центру.
Правда удобно?

Итог
Конечно, в моем примере мы создали очень простой макрос. Но с помощью вышеописанных инструментов вы можете создать и очень сложные макросы. И не только в Writer , но и во всех остальных приложениях пакета LibreOffice (Spreadsheet, Presentations и т. п.). Теперь, когда Вы знаете, как создавать макросы, вы можете легко создавать свои собственные, для того, чтобы облегчить свою работу.
Целью данной статьи является изучение основ работы с помощью инструментом для записи макросов.

Любые материалы я публикую в двух форматах - odt и pdf . Последний удобен для распространения. Экспорт в pdf осуществляется штатными средствами LibreOffice через диалог «Файл → Экспорт в PDF ». В процессе вычитки руководства и исправления в нём ошибок приходится часто пересохранять документ. И чтобы каждый раз вручную не экспортировать документ, я подумал, что было бы неплохо если бы это происходило автоматически при сохранении odf файла. И знание языка макросов LibreOffice в данном случае абсолютно не нужно.

Задача решается с помощью функции записи макроса. По умолчанию она недоступна. Чтобы включить ее перейдите в «Сервис → Параметры » в разделе «LibreOffice » выберите пункт «Расширенные возможности » и установите галочку напротив «Включить запись макросов ».

После перезапуска LibreOffice во вкладке «Сервис → Макросы » появится пункт «Записать макрос ».

После нажатия «Сервис → Макросы → Записать макрос » на экране всплывет окошко с кнопкой «Завершить запись ».

Суть проста:

  1. Включите запись макроса
  2. Выполните необходимое действие пока идет запись. В моем случае я просто выполнил экспорт в PDF через «Файл → Экспорт в PDF »
  3. Нажмите кнопку «Завершить запись »
Все, макрос экспорта в PDF записан, остается только сохранить его.

Для удобства я создал модуль «Export_to_PDF » в библиотеке «Standard » и сохранил свой макрос в этом модуле.

Теперь остается только назначить срабатывание макроса на определенное событие. В нашем случае на сохранение документа. Идем в «Сервис → Настройка » на вкладку «События ».

Иногда требуется провести работу с текстом или обработать текст каким-либо сложным образом и обычных средств, предоставляемых интерфейсом для этого не хватает. Кроме того, бывает необходимо провести одну и ту же последовательность рутинных действий, что порой занимает много времени, а хотелось бы свести последовательность этих действий к одному нажатию кнопки. Writer позволяет создавать специальные макросы, являющиеся по сути процедурами обработки текста, написанные на языке программирования, в нашем случае в качестве языка программирования выступает язык Бэйсик. При этом, обладая множеством всех стандартных операторов присущих языкам программирования высокого уровня, возможно получить доступ к объектам текстового редактора Writer, открытым документам, функциям открытия документов, всем объектам данного документа включая рисунки, параграфы, колонтитулы, выделенный текст, списки, слова, буквы, шрифты и т.д..

2.1. Объекты и классы.

Что же такое Объект. С точки зрения реального мира объект это нечто материальное, существующее и обладающее свойствами и поведением в реальном мире, часто объекты имеют какие то общие свойства, благодаря которым мы относим каждый объект к какому то классу объектов. Например – автомобиль, есть разные конкретные реализации и объекты автомобили, но общим классом является автомобиль, имеющий четыре колеса, способный ездить и управляемый водителем. То же самое можно сказать и о тексте или документе, документ это объект, который содержит объект текст, а объект текст содержит объекты слова, абзацы, буквы, текст редактируется, меняется, отображается, документ создается и сохраняется. Все эти действия мы выполняем с данными объектами, используя функции редактора, но мы можем эти функции вызвать с помощью алгоритмического языка.

Если вы уже работали с языками программирования и писали программы, то знаете что в любом языке программирования существует набор операторов или инструкций с помощью которых можно записать указания или программу, которую сможет понять и выполнить процессор. Существует набор стандартных операторов с помощью которых можно написать практически любой алгоритм, любой сложности – это ветвление, цикл, линейная последовательность выполнения операторов, арифметические действия и возможность обращения к переменным и записи в них каких то значений или результатов логических или арифметических выражений. Обычно в языках высокого уровня стараются избежать сложной работы с памятью присущей машинным языкам, вводится стандартная операция присвоения, которая позволяет некоторой – переменной – символьной последовательности присвоить какоето значение. Грубо говоря, используя эту символьную последовательность в выражениях вы работаете с тем, что содержится в данной переменной как в ящичке. Можно операцию присвоения описать таким образом: В стакан с названием – St1, мы заливаем молоко из кружки Cr1 и говорим, налейте мне молоко в St1 из Cr1. Таким образом, вам нальется то, что содержится в Cr1. Тоже самое и с переменной. Допустим, Val1 = 20; Val2 = 30; Val3 = Val1+Val2; тогда Val3 будет содержать значение 50. Вы знаете, что переменная может содержать в себе только данные определенного вида, а не все подряд (хотя существуют специальный вариантный тип данных, когда тип переменной можно определить в процессе выполнения программы). Ведь мы можем хранить и названия (строки) и числа, и объекты. Поэтому каждой переменной ставится в соответствие какой-то тип данных, или домен или область определения тех значений, которые она может принимать. Обычно в языках программирования – это целочисленные типы, вещественные, строковые, символьные, логические, перечислимые, множества, комплексные числа, тип запись или структуры. Так что же такое переменная объект, это некая ссылка на объект, являющийся сложной структурой данных, которая ко всему прочему может содержать методы работы с этими данными и объектом, а также защищать данные и ограничивать или разрешать к ним доступ.

Переменная-объект, это переменная, которая содержит в себе другие объекты, свойства и действия, производимые над объектом, объект является конкретной реализацией, какого то класса (класс есть описание, некого множества объектов с одними и теми же свойствами). Обычно доступ к свойствам и функциям сложных типов данных (таких как классы) осуществляется путем написания имени переменной объекта, а затем через точку имени функции и или свойства данного объекта.

2.2. Переменные и объекты в Basic

Для объявления переменной указывается ключевое слово dim и затем список переменных через запятую, слово as и тип переменной.

Dim a,b as integer – объявление переменной целого типа. Dim s as string – объявление переменной строкового типа.

Dim mass() as integer – объявление динамического одномерного массива целого типа. Redim mass(100) – изменение длины массива и установка ее равной 100.

Dim desk as com.sun.star.frame.Desktop - переменная типа desktop унифицированной сетевой модели UNO, данная переменная может ссылаться на объекты типа Desktop.

В языке Basic можно обращаться к переменным представляющим собой ссылки на объекты, это могут быть объекты текст, параграфы, таблицы, отображаемые на экране окна, они обладают набором свойств и методов работы с данными объектами. Объектная модель может быть любой, как и ее реализация, например в пакете Microsoft Office реализована своя объектная модель, в пакете LibreOffice или OpenOffice своя, потому объекты и способ взаимодействия с этим объектами в этих различных пакетах отличаются.

2.3. Операторы Basic

Оператор цикла For.

For index=n1 to n2 Rem тело цикла

Переменная Index пробегает значения от n1 до n2 c инкрементацией s (увеличение на s), в данном случае s может быть переменной или константой целого типа, квадратные скобочки указывают на то, что конструкция является не обязательной, в случае если она не указывается то шаг равен 1.

Например, val =0

For xyz = 4 to 50 step 4 val=val+xyz

Алгоритм вычисляет сумму значений от 4 до 50 с шагом 4, то есть сумму 4, 8, 12, 16 ...

до 48 в переменную val. val1 =0

For aval = 1 to 50 val1=val1+aval next aval

В данном случае рассчитывается сумма целых чисел от 1 до 50.

Оператор цикла While, делай пока выполняется условие. Операторы внутри цикла повторяются до тех пор пока выполняется условие.

While <условие> операторы Wend

Пример: While i

Цикл выполняется пока переменная i меньше N. Условный оператор If,

if <условие> then

<последовательность операторов если условие выполняется> end if

Пример: если I меньше 100 (если условие выполнено) то увеличить I на 1, иначе уменьшить на 1.

If i<100 then i=i+1

else i=i-1 end if

2.4. Процедуры и функции.

Функции и процедуры представляют собой отдельные блоки операторов, которые могут быть вызваны в основной программе или подпрограмме, обычно вызов функции или процедуры осуществляется в программе с помощью указания ее имени и передаваемых в нее параметров, после выполнения операторов функции управление возвращается программе или подпрограмме вызвавшей ее и начинается выполнение операторов следующих за функцией или процедурой. Очевидно, что назначение процедур и функций в том, чтобы не писать каждый раз один и тот же код для часто повторяющихся операций выполняющих определенное логически завершенное действие. При этом внутри функций и процедур возможно использовать свои локальные переменные, которые могут иметь те же названия, что и переменные в других процедурах и функциях и в основной программе. При этом извне процедуры мы не можем менять локальные переменные функции. Типичное использование процедур и функций заключается, в том что мы передаем в функцию какие то значения, на основе которых эта функция производить ряд действий и вычисление какого-то результата. Основное отличие процедур от функций в том, что имени функции ассоциирован какой то тип возвращаемых данных, грубо говоря, функцию можно использовать в выражениях, например, арифметических или в логических, в условных операторах и циклах. Процедура вызывается вне какого-либо выражения.

Функция возвращает сумму двух чисел, передаваемых как фактические параметры в функция из внешней программы

Function sum(a,b as integer) as integer Sum=a+b

Использование функции sum в программе. Dim x as integer

x = 2 x=x+sum(x,4)*2

Пример процедуры позволяющей сложить два числа, значение возвращается в формальном параметре с, при вызове процедуры не должно быть константой, а должно быть переменной типа integer

Sub sum(a,b,c as integer)

Dim c as integer Call sum(2,2,c)

2.5. Создание макроса в LibreOffice

Для создания макроса в LibreOffice выбираем сервис+макросы+управление макросами+LibreOffice Basic (Tools+Macros+Organize Macros). При этом отобразится окно представленное на рисунке ниже (рисунок 19). Для того, чтобы макрос был сохранен в самом документе, необходимо выбрать ваш документ, выбрать набор стандартных модулей «standard» и затем нажать «создать», затем необходимо ввести имя модуля. После создания модуля можно его выбрать, в окошке справа выбрать макрос Main и нажать редактировать (Edit). Либо необходимо после создания модуля (Module1), написать в поле Macro Name (Имя макроса) новое имя макроса и нажать создать (рисунок 20).

Рисунок 19 - Окно создания и редактирования макросов

Рисунок 20 - Пример создания нового макроса MyMainMacros

В результате создания и редактирования макроса появляется окно редактора Бэйсика, на рисунке приведен пример с двумя макросами, естественно их может быть больше и они могут иметь входные параметры.

Рисунок 21 - Редактор Basic и два макроса

В LibreOffice, как уже отмечалось, объектная модель несколько другая нежели в Microsoft Office, в LibreOffice Basic используется так называемся унифицированная сетевая объектная модель UNO. Ниже приведен пример макроса openoffice увеличивающий размер шрифта каждого параграфа.

Dim Doc As Object

Dim Enum As Object

Dim TextElement As Object

" StarDesktop - главный объект доступный из макроса

" создание объекта enumeration

Enum = Doc.Text.createEnumeration

" цикл по всем текстовым элементам While Enum.hasMoreElements TextElement = Enum.nextElement

" проверка является ли текущий блок таблицей

If TextElement.supportsService("com.sun.star.text.TextTable") Then

MsgBox "Текущий блок содержит таблицу"

По состоянию на сейчас в LibreOffice управление макросами реализовано в интерфейсе через одно место.

Проблемы, как я их вижу, такие:

Из меню Сервис->Макросы->Управление макросами доступны ЧЕТЫРЕ разных диалога управления макросами, для каждого доступного языка отдельно. Basic, JavaScript, BeanShell и Python. Причем все они разные.

Причём диалог для Basic не позволяет управлять макросами. Для собственно управления макросами Basic нужно открыть отдельный дополнительный диалог.

Кнопка Правка во всех диалогах позволяет редактировать сам макрос, а вовсе не имя/положение библиотеки/модуля/диалога.

Я предлагаю всё это безобразие упразднить и сделать ОДИН диалог для управления макросами и запуска макросов.

Вот такого примерно вида (я на английском делал, потому что в багзилле так ВСЕ поймут, о чем речь и зачем):

В левой части диалога мы именно управляем библиотеками/модулями/диалогами, а также умеем делать импорт/экспорт. А в правой части мы работаем непосредственно с макросами: запускаем, назначаем макросы на события и редактируем их, если надо.

Никакого разделения по языкам программирования не нужно, в силу того, что LibreOffice сам различает на каком языке программирования написаны макросы в библиотеках и, я так понимаю, не допустит, чтобы из библиотеки Basic запустился модуль на Python. А значит и в моем варианте диалога нужно заставить LibreOffice значками выделять библиотеки/модули на разных ЯП и они все просто будут иерархически в одном дереве.

Есть ещё один момент: в текущей версии LibreOffice для работы с макросами на Python нужно внешнее расширение APSO . Без него не получится даже создать соответствующую библиотеку. Почему так сделано, я не очень понимаю, как и то, почему это расширение не включено в базовую поставку LibreOffice, раз базовый функционал просто нерабочий.

Так вот, при переделке диалога управления макросами этот странный факт также необходимо будет учитывать.