Мы в МойОфис любим Lua. И сами активно его используем: в наших редакторах с помощью Lua работают макросы и надстройки. И помогаем разработчикам лучше узнать этот язык — при нашей поддержке вышли уже два издания классного учебника по Lua от Роберту Иерузалимски (кстати, сам автор считает, что этот язык в части задач даже более хорош, чем Си!)

А летом 2025 года мы выпустили целый трёхтомник по Lua. Первый том — новое издание книги Роберту. Второй и третий — вышедшие впервые учебники от Дмитрия Шульгина, старшего тренера по продуктам Учебного центра МойОфис.

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

«Lua изначально создавался для решения реальных задач взаимодействия с хост-программами, такими как МойОфис. Его архитектура предоставляет разработчикам мощные инструменты для творческой реализации своих идей», — Роберту Иерузалимски, один из создателей языка Lua.

«Русскоязычных пособий по Lua катастрофически не хватает, хотя спрос на них высок. Наш трехтомник решает эту проблему», — Дмитрий Шульгин, старший тренер по продуктам Учебного центра МойОфис.

Чтобы начать выполнять задания из трёхтомника и создавать макрокоманды в редакторах МойОфис, можно установить бесплатную версию «МойОфис Стандартный. Домашняя версия».

Занятие 1. Введение в разработку макрокоманд.

В ходе занятия вы:

  • Узнаете зачем нужны макрокоманды и особенности их использования в редакторах МойОфис.

  • Познакомитесь с возможностями встроенного редактора макрокоманд: создавать, удалять и переименовывать макрокоманды.

  • Запустите первую макрокоманду на Lua в приложении МойОфис.

Содержание занятия:

1.1. Что такое макрокоманды и почему на языке Lua.

1.2. Обзор редактора макрокоманд в МойОфис.

1.3. Запуск простой макрокоманды.

1.1. Что такое макрокоманды и почему на языке Lua

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

Чтобы ускорить работу пользователей, разработчики редакторов создали множество инструментов, позволяющих выполнить сразу несколько операций с выбранными объектами – например, в текстовых редакторах с помощью стилей можно сразу изменить настройки шрифта и абзаца, во всех редакторах с помощью «кисточки» быстро перенести форматирование с одного объекта на другой, в табличном редакторе – автоматически применять форматирование к новым строкам.

Но что делать, если одну и ту же последовательность действий необходимо выполнить на нескольких листах в табличном документе? Или даже выполнить действия с несколькими разными объектами? Для этого придуманы макрокоманды (дословно – команды, которые позволяют выполнить несколько простых команд).

Макрокоманды (макросы) представляют собой программы небольшого размера, с помощью которых пользователь автоматизирует выполнение продолжительных или часто повторяющихся операций внутри документов. С помощью макрокоманд можно решать следующие задачи работы с документами и данными в них:

  • Автоматизировать форматирование текста.

  • Проверить корректность данных.

  • Отредактировать документ, заменить одни данные на другие.

Макросы фиксируются в виде программ на том языке программирования, который поддерживается в редакторах. Начинающие пользователи предпочитают работу с функцией «Запись макрокоманды», которая формирует код макроса, фиксируя действия пользователя. Опытные пользователи создают макросы «с нуля» во встроенной среде разработки, что позволяет использовать все возможности языка программирования, в том числе реализовать сценарии обработки данных, недоступные в интерфейсе программы.

Для того, чтобы пользователи могли самостоятельно разобраться в работе макросов, их создают и редактируют с использованием скриптовых языков программирования, для которых характерны следующие черты:

  • простой синтаксис, что обеспечивает быстрый старт.

  • хранение программ в виде текста, что упрощает изучение, отладку и контроль работы макросов. 

  • выполнение программ с использованием интерпретатора (специальной программы, переводящей код в действия только при непосредственном вызове), что позволяет выполнять макросы по отдельности.

В редакторах МойОфис разработка макрокоманд ведется на языке программирования Lua, который не только является скриптовым языком программирования, но и обеспечивает дополнительные возможности:

  • Макросы одинаково работают в настольных редакторах МойОфис для ОС, Linux, для ОС Windows и в веб-редакторах.

  • Не требует покупки дополнительного ПО или специальных лицензий для работы.

  • Допускает подключение внешних модулей для расширения функциональных возможностей — так реализован доступ к объектам в документе.

Для создания макрокоманд в редакторах МойОфис можно использовать встроенные средства программирования или специальную функцию «Запись макрокоманды», которая фиксирует действия пользователя и сохраняет в виде программы.

Справочно о Lua

Язык Lua разработан в 1993 году, как средство программирования для пользователей, не являющихся профессиональными программистами. Малый размер интерпретатора, относительно высокая скорость исполнения и легкая расширяемость позволили этому языку найти применение в сфере разработки компьютерных игр. В 2003 году Lua был признан самым популярным скриптовым языком для разработки игр по версии сообщества GameDev.net. Также Lua активно используется для написания расширений и плагинов к программным продуктам, при создании пользовательских интерфейсов и в конфигурационных файлах. 

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

1.2. Обзор редактора макрокоманд в МойОфис

Диалоговое окно «Редактирование макроса» открывает доступ к редактору макрокоманд, с помощью которого пользователь создает и запускает макрокоманду.

Запустите приложение «МойОфис Текст», затем в командном меню выберите пункт «Инструменты» и «Редактирование макроса».

Окно приложения «МойОфис Текст»
Окно приложения «МойОфис Текст»

Окно редактора макрокоманд является модальным по отношению к главному окну приложения. Это означает, что пользователь не может просматривать или редактировать текст документа, пока открыто окно редактора макрокоманд.

Чтобы закрыть окно редактора макрокоманд, необходимо нажать на крестик в строке заголовка окна. Специальной кнопки для сохранения введенной макрокоманды нет, при закрытии окна сохранение происходит автоматически.

Окно редактора макрокоманд
Окно редактора макрокоманд

Окно редактора макрокоманд состоит из областей:

  1. Перечень созданных в документе макрокоманд.

  2. Кнопки для создания и удаления макрокоманд.

  3. Область ввода текста макрокоманд.

  4. Кнопки выполнения и отладки макрокоманд.

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

Рассмотрим эти области подробнее.

1.2.1 Перечень макрокоманд в документе

Перечень представляет собой список макрокоманд в открытом документе. Вновь созданный документ не содержит макрокоманд. Если в перечне содержится несколько макрокоманд, переход между ними выполняется с помощью щелчка мыши по названию макроса, активная макрокоманда в перечне подсвечивается.

1.2.2 Кнопки для создания и удаления макрокоманд

Для добавления новой макрокоманды необходимо нажать кнопку с изображением знака «+». После её нажатия, в перечне появится новый пункт под названием «Без имени». В области ввода текста макрокоманды (область 3) появится надпись: «Введите новый скрипт здесь».

Чтобы задать название новой макрокоманде, достаточно начать печатать его с клавиатуры и нажать клавишу Ввод (Enter). Для изменения названия макрокоманды в перечне макрокоманд необходимо дважды щелкнуть левой кнопкой мыши по текущему названию и ввести новое имя. Возможно задавать имена макрокоманд как на русском, так и на английском языке (латиница).

Чтобы удалить макрокоманду, необходимо выделить ее и нажать кнопку с изображением знака «-» внизу списка макрокоманд.

Панель со списком макрокоманд в окне редактора макрокоманд
Панель со списком макрокоманд в окне редактора макрокоманд

1.2.3 Область ввода текста макрокоманды Область ввода представляет собой небольшой редактор текста и предназначена для написания исходного кода макрокоманды на языке программирования Lua. Редактор поддерживает синтаксис языка Lua. Обратите внимание, что ключевые слова языка отображаются синим цветом, комментарии – зеленым и т.д.

Область ввода макрокоманды в окне редактора макрокоманд
Область ввода макрокоманды в окне редактора макрокоманд

Область ввода поддерживает операции копировать (Ctrl+C), вырезать (Ctrl+X), вставить (Ctrl+V) через буфер обмена и операцию отмены последнего действия (Ctrl+Z). Для ввода кода макрокоманды необходимо создать и назвать ее, а затем набрать код макроса в области 3. Чтобы редактировать макрокоманду, необходимо выбрать ее в перечне макрокоманд и внести изменения в ее текст в области 3. 1.2.4 Кнопки выполнения и отладки макрокоманд Кнопки для выполнения и отладки становятся активными, изменяя цвет, после ввода текста макрокоманд в области 3. Чтобы выполнить код макрокоманды, необходимо нажать кнопку «Выполнить» (). Результат или статус выполнения макрокоманды отображается в области вывода результата выполнения макрокоманд (область 5 на рисунке 2). Макрокоманды также можно запускать, не открывая редактор. Для этого необходимо открыть список макросов, нажав на иконку «Макрокоманды» на правой боковой панели. Далее выбрать из списка макрос и нажать кнопку «Выполнить» (см. рисунок 5). Произойдет выполнение макроса без открытия редактора. Появится всплывающее сообщение «Макрокоманда выполнена».

Запуск макроса из списка на правой панели редактора
Запуск макроса из списка на правой панели редактора

При написании кода могут возникать ошибки. Помочь их выявить и локализовать может процесс отладки кода. Подробнее процесс отладки будет рассмотрен в занятии «Отладка кода макрокоманд». 1.2.5 Область вывода результата исполнения макрокоманды и процесса отладки Область вывода результата также называется консоль. В консоль выводятся любые значения, которые пользователь может напечатать с помощью функции print(). После нажатия кнопки «Выполнить» начинается выполнение исходного кода макрокоманды. Когда в исходном коде встречается вызов функции print, происходит немедленный вывод на печать значения функции. Например, выражение

print("МойОфис!")

приведет к тому, что в консоли будет напечатан текст МойОфис!

Консоль редактора макрокоманд
Консоль редактора макрокоманд

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

1.3. Запуск простой макрокоманды Теперь давайте создадим первую макрокоманду и запустим ее. В окне редактирования макросов нажмите на кнопку «+» в перечне макрокоманд. В качестве имени макрокоманды укажем слово «Привет». В области ввода текста макрокоманды введем следующий текст:

print("Привет, МойОфис!")

Нажмем кнопку «Выполнить» для запуска макрокоманды. В консоли будет напечатан текст:

Привет, МойОфис!

Закроем окно редактора макрокоманд, нажав крестик в правом верхнем углу окна. Сохраним изменения (мы ведь создали макрокоманду!) в открытом документе нажатием кнопки «Сохранить» на панели команд или с помощью комбинации клавиш Ctrl+S. В качестве имени документа укажем «Макрокоманда-1».

Мы создали и выполнили первую макрокоманду, используя стандартную функцию print() языка программирования Lua. Функция print() предназначена для печати значения, переданного в качестве аргумента функции, то есть между круглых скобок (). Аргументом команды могут быть как текст, так и числа, переменные или целые выражения. Текст в качестве аргумента всегда пишется в кавычках, числа и переменные — без кавычек. Пример использования команды print() с различными аргументами:

Ввод в окне редактора макрокоманд

print( 8 )

print("Фрукты: Яблоки, Груши, Апельсины")

print( 2 + 2 + 2 )

Результат в консоли после нажатия кнопки «Выполнить»

> 8

> Фрукты: Яблоки, Груши, Апельсины

> 6

На следующем занятии будет рассмотрено более подробно, что называют переменными и с какими типами данных работает язык Lua. Для закрепления пройденного материала ответьте на вопросы и выполните практические задания в конце данного занятия.

Контрольные вопросы и задания

  1. В каких ситуациях рационально использовать макрокоманды?

  2. Чем обоснован выбор языка программирования Lua для написания макросов?

  3. Как запустить окно редактирование макросов в редакторах МойОфис?

  4. Наберите коды макрокоманд из примеров в редакторе макрокоманд. Попробуйте ввести свои данные в код и выполнить его.

Вот такая первая глава — заинтересовались? Если да, то приглашаем вас на эксклюзивный вебинар, посвященный языку Lua в настольных редакторах МойОфис. Также мы проводим специальный обучающий курс по Lua, на который можно записаться уже сейчас.

И конечно, приглашаем вас ознакомиться с нашими вакансиями. Тем более что в наших продуктах можно пощупать разработку на Lua изнутри :)

Комментарии (2)


  1. Surrogate
    02.10.2025 15:41

    А летом 2025 года мы выпустили целый трёхтомник по Lua.

    А где эти книги можно купить или скачать?

    Также мы проводим специальный обучающий курс по Lua

    В разделе Программа курса, если кликать по плюсикам (просмотр разделов курса) не видно подробностей!


  1. AuToMaton
    02.10.2025 15:41

    Круто. Курс, трёхтомник…

    Всегда считал, что пользовательская Lua изучается за вечер двумя путями на выбор - либо распоследний вариант прочтением доков, либо самый нужный вариант открытием Neovim. И даже приводил её в пример когда спрашивали как вкатиться в IT. Больше не буду - (мои) знания в IT действительно устаревают на глазах.