Взаимодействие с формами в AlterOffice с помощью макросов

В этой статье мы рассмотрим, как использовать язык Python для взаимодействия с формами в AlterOffice. Будет рассмотрено как обрабатывать события и изменять данные в формах. Вы узнаете, как использовать API  AlterOffice  для доступа к элементам формы, установки обработчиков событий и выполнения действий при изменении данных.

Получения доступа к элементу управления


Для начала, необходимо получить объект коллекции форм:

desktop = XSCRIPTCONTEXT.getDesktop()
doc = desktop.loadComponentFromURL( "file:///C:/test/document.odt", "_default", 0, () )
forms = doc.DrawPage.Forms

Далее, получим объект формы:

form = forms.getByName("Form1")

В представленном выше примере мы получаем объект формы по имени или индексу, используя метод getByName() или getByIndex().Чтобы узнать имя формы, можно щелкнуть правой кнопкой мыши на элементе управления в режиме разработки, затем выбрать "Свойства формы" -> "Общие" -> "Имя".



Получим объект элемента управления:

control = form.getByIndex(0)

Получив объект элемента управления, мы можем просмотреть и изменить его параметры. Например, состояние и текст:

control.State = 1
control.Label = "CheckBox"

Элемент управления после запуска макроса:




Для  просмотра всех доступных параметров элементов управления можно вывести их в документ:

props = control.getPropertySetInfo().getProperties()
for prop in props:
       propName = prop.Name
       propValue = control.getPropertyValue(propName)
       text.insertString(cursor, propName + ": " + str(propValue) + "\n", False)


Выполнение действий при изменении состояния


При работе с формами есть возможность привязать выполнение функции к определенным условиям. Например, изменение цвета фона при определенном тексте в текстовом поле. 

Пример функции для изменения цвета фона в текстовом поле:

def change_back_color(text_event):
   back_color = 0xFFFFFF
   if text_event.Source.Model.Text == "red":
       back_color = 0xFF0000
   elif text_event.Source.Model.Text == "blue":
       back_color = 0x0000FF
     
   text_event.Source.Model.BackgroundColor = back_color


В данном примере цвет фона текстового поля изменяется в зависимости от введенного текста. 

Далее необходимо связать созданную функцию с событием изменения текста в свойствах элемента управления во вкладке "События".