Как включить макросы в либре офис эксель
Что такое LibreOffice
Пакет свободного ПО для работы с документами. Появился в 2010 году, но уже успел завоевать бешеную популярность во всем мире. С помощью его можно создавать и редактировать файлы чуть менее сотни различных форматов, в том числе документы Microsoft Office (.doc, .docx, .xls, .xlsx). Есть версии для Windows, Linux и OS X.
Еще LibreOffice можно установить на сервер и запускать в браузере. Для этого сервер должен управляться Linux и на нем должна быть установлена библиотека GTK3 (она нужна для трансляции графики в HTML5).
Программный пакет включает в себя следующие компоненты:
- Text — аналог Word;
- SpreadSheet — аналог Excel;
- Presentation — аналог PowerPoint;
- Drawing — векторный графический редактор;
- Database — панель управления базами данных, можно использовать для управления локальными базами (dBase) данных или для администрирования удаленных (MySQL, Oracle и другие);
- визуальный HTML-редактор;
- редактор формул;
- мастер по созданию визиток.
Специально для тебя мы сделали подборку исходников макросов для LibreOffice. Ищи их в репозиториях GitHub к этому номеру.
.bash и LibreOffice
Создавать и редактировать документы LibreOffice можно напрямую из shell, используя LibreOffice API. В качестве примера сконвертируем ODT-файл в docx:
libreoffice --headless --convert-to docx filetoconvert. odtЯзыки, на которых можно написать макрос
Для написания макросов на этом языке не нужно устанавливать никаких дополнений. Пакет LibreOffice Basic поставляется с обширной коллекцией примеров кода для разных ситуаций, и этот способ автоматизации отлично документирован на сайте проекта. Большая часть нашей статьи посвящена этому способу.
Открываем менеджер макросов
Этот способ достался в наследство от OpenOffice (проект курировала компания Oracle). BeanShell — это скриптовый язык, созданный для тестирования и отладки Java-программ. Для написания макросов на этом языке необходимо изменить установить соответствующее расширение goo.gl/OzHo1W.
Кнопка Edit неактивна. С Python все не так просто
Для того чтобы автоматизировать работу с LibreOffice на Python, нужно установить соответствующее дополнение:
sudo apt- get install libreoffice- script- provider- pythonЕсли ты используешь LibreOffice под Windows, тогда надо установить это дополнение через Tools → Options → LibreOffice → General.
После установки можно редактировать Python-макросы из встроенного редактора.
Java Script
C JS ситуация аналогична ситуации с Python. Для выполнения макросов требуется установить libreoffice-script=provider-js.
Соответственно, для Windows способ установки также аналогичен предыдущему пункту.
Как и в MS Office, в LibreOffice есть возможность записывать макросы. Это можно сделать через пункт меню Record Macro.
Можно настроить несколько способов вызова макроса:
- из пункта меню;
- сочетанием клавиш;
- по событию;
- по гиперссылке;
- по элементу картинки;
- по форме или ее части.
Примеры макросов:
В принципе, на LibreOffice Basic можно имитировать любые действия пользователя. Для наглядности приведем примеры автоматизаций для различных компонентов LibreOffice.
Hello world
Пример простейшего макроса для вывода сообщения с текстом:
Macro Print "Ты ведь невольно вспомнил про свою учительницу информатики?"SpreadSheet
Этот код красит первую ячейку во втором листе в книге в черный цвет:
Dim oTextTables As Variant ' Массив — все листы книги Dim oTextTable As Variant ' Переменная для листа, с которым будем работать oTextTables = ThisComponent. getTextTables() ' Кладем в переменную все листы книги oTextTable = oTextTables. getByIndex ( 1 ) ' Кладем в переменную второй лист книги oCell = oTextTable. getCellByPosition( 1, 1) ' Первая ячейка второго листа oCell. setPropertyValue( "BackColor", RGB( 0, 0, 0)) ' Красим!UNO — компонентная модель для взаимодействия объектов в OpenOffice и LibreOffice. Для программного управления этой моделью существуют UNO API. С помощью его производится обращение к LibreOffice из сторонних скриптов (Python, JS и BeanShell).
Presentation
Макрос для создания нового слайда в презентации:
oDrawPage = oDrawPages. insertNewByIndex( oDrawPages. getCount() ) oTextShape = oDoc. createInstance ( "com. sun. star. drawing. TextShape" )Drawing
Этот макрос удаляет все линии с рисунка. Когда это может пригодиться? Допустим: нарисовали 30-страничную схему, где линиями соединены все объекты. Потом пришел твой шеф и сказал: «Нафиг линиями? И без них все понятно!»
Doc = ThisComponent ' Кладем в переменную текущий графический документ c = Doc. DrawPage. count ' Считаем общее количество графических примитивов drawObject = Doc. DrawPage ( i - 1 ) ' Не забываем, что у прогеров первая цифра — ноль if drawobject. ShapeType = "com. sun. star. drawing. LineShape" then Doc. DrawPage. remove( drawObject) ' В случае, если объект — линия, удаляем егоАналогичным образом можно удалить все стрелочки или другие фигуры.
Автоматизация OpenOffice
Если ты олдфаг, привык к OpenOffice и не хочешь менять его не на что‑то другое, это не лишает тебя возможности автоматизировать свою работу. Многие примеры из этой статьи будут работать в этом пакете. А документации по автоматизации OpenOffice гораздо больше, чем по LibreOffice. Вот ссылка на отличный FAQ, в котором есть ответы на все вопросы по автоматизации OpenOffice:
Database
С помощью макросов можно выполнять запросы к базам данных (предварительно необходимо установить соединение с database-сервером):
oForm. Activeconnection. CreateStatement. execute( "DELETE * from contacts")Pandoс
Утилита для обработки текстовых файлов. Она может конвертировать Markdown, LaTeX и HTML в целый калейдоскоп различных форматов. Вот некоторые из них:
- PDF;
- MediaWiki;
- DocBook;
- EPUB;
- Docx;
- ODT;
- HTML-слайды презентаций.
Заключение
LibreOffice Basic синтаксически идентичен VBA и всем остальным разновидностям бейсика, с которыми многим из нас пришлось столкнуться в школе и институте. Но не надо ставить LOB на один уровень с его братом от Microsoft. Во‑первых, редактор макросов в LB гораздо дружественнее и терпимее к промахам пользователя. В частности, в случае ошибки не надо гуглить ее код по форумам в стиле «информатика для школьника», чаще всего понять, что не так, можно, не выходя из окна с кодом. Во‑вторых, выполнение макроса никогда не парализует работу компьютера (как это иногда может сделать бесконечный цикл в VBA). А в‑третьих, благодаря возможностям UNO API автоматизировать можно почти все что угодно.
Чаще всего, макрос это сохранённая последовательность команд или нажатий клавиш, предназначенная для последующего использования. Например, можно сохранить и «впечатывать» свой адрес. Язык программирования LibreOffice очень гибок и позволяет автоматизировать как простые, так и сложные задачи. Макросы часто используются, когда мы хотим повторять ещё и ещё раз определённую последовательность действий в схожих условиях.
Макросы в LibreOffice обычно записываются на языке, называемом LibreOffice Basic или просто Basic. Конечно можно долго изучить Basic и наконец начать программировать, но это руководство поможет вам сразу решать простые задачи. Начинающие пользователи часто с успехом применяют макросы, написанные кем-либо другим. Также, можно использовать функцию записи макросов, чтобы сохранить последовательность нажатий клавиш и использовать её ещё раз.
Большинство действий в LibreOffice выполняются путём отправки команды (посылки команды, dispatching a command), которая перехватывается и выполняется. Функция записи макросов позволяет записать непосредственные команды, которые обрабатываются (смотрите Платформа диспетчера).
Ваш первый макрос¶
Добавление макроса¶
Первый шаг в изучении программирования макросов, это найти и использовать существующие макросы. В этом разделе подразумевается, что у вас уже имеется макрос, который вы хотите использовать. Вы могли найти его в Интернете или в какой-нибудь книге. Рассмотрим пример 1. Чтобы записать этот макрос, вы должны предварительно создать библиотеку и модуль, и уже в модуле написать текст макроса, смотрите Организация макросов.
Чтобы создать библиотеку, необходимо выполнить следующие шаги:
- Выберете пункты главного меню Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами Libreoffice Basic.
Диалог работы с макросами LibreOffice Basic
- Нажмите Управление, чтобы открыть диалог организатора макросов и выберите вкладку Библиотеки.
- Выберите в выпадающем списке Приложение/Документ пункт Мои макросы и диалоги.
Диалог организатора макросов LibreOffice Basic
- Нажмите Создать, чтобы открыть диалог создания новой библиотеки.
- Введите имя библиотеки, например, TestLibrary и нажмите OK.
- Выберите вкладку Модули.
- В списке модулей раскройте Мои макросы и выберите TestLibrary. Модуль с именем Module1 уже существует, он может содержать ваши макросы. Если необходимо, том можно нажать Создать, чтобы создать другой модуль в библиотеке.
- Выберите Module1 или новый модуль, который вы создали и нажмите Правка, чтобы открыть интегрированную среду разработки (IDE). Интегрированная среда разработки это текстовый редактор, включённый в LibreOffice, который позволяет создавать и редактировать макросы.
Интегрированная среда разработки макросов
- После создания нового модуля он содержит комментарий и пустой макрос, названный Main, который ничего не делает.
- Добавьте новый макрос или до Sub Main или после End Sub . В примере ниже приведен новый макрос, который был добавлен до Sub Main .
Пример 2: Module1 после добавления нового макроса:
- Нажмите на значок Компилировать на панели инструментов, чтобы откомпилировать макрос.
- Поставьте курсор в процедуру HelloMacro и нажмите на значок Выполнить BASIC на панели инструментов или нажмите клавишу F5 , чтобы выполнить HelloMacro в модуле. Откроется маленький диалог со словом Привет . Если курсор не находится внутри процедуры Sub или функции Function , откроется диалог выбора макроса для запуска.
- Нажмите OK, чтобы закрыть диалог.
- Чтобы выбрать и выполнить любой макрос в данном модуле, нажмите значок Выбрать макрос на стандартной панели инструментов или выберите Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic .
- Выберите макрос и нажмите Выполнить.
Запись макросов¶
Если вы хотите многократно ввести одинаковую информацию, вы можете скопировать эту информацию после того, как она введена в первый раз, затем вставлять эту информацию в ваш документ каждый раз по мере необходимости. Однако, если вы скопировали в буфер обмена что-то ещё, содержимое буфера меняется. Это означает, что вы должны заново скопировать вашу повторяющуюся информацию. Чтобы обойти эту проблему, вы можете создать макрос, который в процессе выполнения вводит нужную вам информацию.
Для некоторых типов многократно вводимой в документах информации более удобно создать файл автотекста. Описание работы с автотекстом смотрите в справочной системе и в главе Глава 3 – Использование Стилей и Шаблонов данного руководства.
- Убедитесь, что функция записи макросов активизирована, выбрав Сервис ‣ Параметры ‣ LibreOffice ‣ Расширенные возможности . Установите флажок Включить запись макросов. По умолчанию эта функция отключена, когда LibreOffice впервые установлен на ваш компьютер.
- Выберите Сервис ‣ Макросы ‣ Записать макрос из главного меню, чтобы запустить запись макроса. Появится маленький диалог, подтверждающий, что LibreOffice записывает ваши действия.
Диалог записи макроса
- Наберите желаемую информацию или выполните необходимые действия. Например, напечатайте ваше имя.
- Нажмите Завершить запись в маленьком диалоге, чтобы остановить запись, и появится диалог работы с макросами LibreOffice.
- Откройте библиотечный контейнер Мои макросы.
- Найдите библиотеку с именем Standard в Моих макросах. Обратите внимание, что каждый библиотечный контейнер содержит библиотеку Standard .
- Выберите библиотеку Standard и нажмите Создать модуль, чтобы создать новый модуль, содержащий макросы. Откроется диалог создания модуля.
Диалог создания модуля
- Задайте название для нового модуля, например, Recorded и нажмите OK, чтобы создать модуль. В диалоге работы с макросами теперь виден этот новый модуль в составе библиотеки Standard .
- В поле Имя макроса напечатайте имя для макроса, который вы только что записали, например, EnterMyName .
- Нажмите Записать, чтобы сохранить макрос и закрыть диалог работы с макросами.
- Если вы верно выполнили все шаги, описанные выше, библиотека Standard теперь содержит модуль Recorded , и этот модуль содержит макрос EnterMyName .
Когда LibreOffice создаёт новый модуль, в этот модуль автоматически добавляется процедура с именем Main .
Запуск макроса¶
- Выберите Сервис ‣ Макросы ‣ Выполнить макрос , чтобы открыть диалог выбора макроса.
- Например, выберите ваш только что созданный макрос EnterMyName и нажмите Выполнить.
- Можно также вызвать из главного меню Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами, выбрать ваш макрос и нажать Выполнить.
Диалог выбора макроса
Просмотр и редактирование макросов¶
Чтобы просмотреть или отредактировать созданные вами макросы выполните:
- Сервис ‣ Макросы ‣ Управление макросами ‣ LibreOffice Basic , чтобы открыть диалог работы с макросами.
- Выберите ваш новый макрос EnterMyName и нажмите Правка, чтобы открыть макрос в интегрированной среде разработки.
Макрос EnterMyName не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Макрос EnterMyName не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Пример 3: Сгенерированный макрос EnterMyname :
Комментарии¶
Подробные комментарии являются необходимой частью программы. Без комментариев и сам программист зачастую забывает, что же он написал несколько недель (а может и месяцев или лет) тому назад.
Все комментарии в макросах начинаются с ключевого слова REM . Весь текст строки после REM игнорируется компьютером при выполнении макроса. Можно также использовать символ одинарной кавычки ( ' ), чтобы начать комментарий.
Ключевые слова в LibreOffice Basic могут быть записаны в любом регистре, таким образом REM , Rem , и rem могут начинать комментарий. Если вы используете символические константы, определяемые в программном интерфейсе приложения (Application Programming Interface, API), безопаснее считать, что имена чувствительны к регистру. Символические константы не описаны в данном руководстве, они не нужны, когда вы используете функцию записи макросов в LibreOffice.
Определение процедур¶
Отдельные макросы сохраняются в процедурах, которые начинаются с ключевого слова SUB . Окончание процедуры обозначается END SUB . Код модуля в примере 3 начинается с определения процедуры, названной Main, в которой нет ничего, и она ничего не делает. Следующая процедура, EnterMyName , содержит сгенерированный код вашего макроса.
Когда LibreOffice создаёт новый модуль, в этот модуль всегда автоматически добавляется процедура с именем Main .
Существует много полезной информации, не вошедшей в данное руководство, однако знание о ней весьма интересно:
Определение переменных¶
Вы можете записать информацию на листе бумаги и позднее воспользоваться этой информацией. Переменные, подобно листу бумаги, содержат информацию, которую можно изменять или читать. Ключевое слово Dim используется для описания типа переменной и для задания размерности массивов. Оператор dim в макросе EnterMyName используется подобно подготовке листа бумаги для записи информации.
В макросе EnterMyName переменные document и dispatcher определены с типом object (объект). Другие часто используемые типы переменных включают string (строка), integer (целое) и date (дата). Третья переменная с именем args1 – это массив значений свойств. Массивы это переменные, содержащие несколько величин, подобно тому, как в одной книге содержится несколько страниц. Величины в массивах обычно нумеруются начиная с нуля. Число в скобках задаёт максимальный номер, используемый для доступа к элементу массива. В данном примере в массиве содержится только одна величина, и она имеет номер ноль.
Как это работает¶
Разберёмся более подробно с кодом макроса EnterMyName . Может быть вы и не поймёте всех тонкостей, но разбор каждой строки в коде позволит вам осознать то, как работают макросы.
Служит для отображения имени выбранного макроса. Чтобы создать или изменить имя макроса, введите его здесь.
Макрос из / Сохранить макрос в
Возвращает список библиотек и модулей, из которых можно открыть макросы или сохранить их. Чтобы сохранить макрос с документом, откройте документ, а затем откройте это диалоговое окно.
Выполнить / Сохранить
Выполнение или сохранение текущего макроса.
Назначить
Открывается диалоговое окно Настройка, в котором выбранный макрос можно назначить команде меню, панели инструментов или событию.
Редактировать
Запускает редактор Basic LibreOffice и открывает выбранный макрос или диалоговое окно для изменения.
Создать / Удалить
Создание нового макроса или удаление выбранного макроса.
Для создания нового макроса необходимо выбрать модуль "Standard" в списке Макрос из, а затем нажать кнопку Создать.
Чтобы удалить макрос, выделите его и нажмите кнопку Удалить.
Создать библиотеку
Сохраняет записанный макрос в новой библиотеке.
Создать модуль
Сохраняет записанный макрос в новом модуле.
Управление
Открывает диалоговое окно Управление макросами, в котором можно добавлять, изменять или удалять существующие модули, диалоговые окна и библиотеки макросов.
Вкладка "Модуль/Диалоговое окно"
Позволяет управлять модулями или диалоговыми окнами.
Модуль/Диалоговое окно
Вывод списка существующих макросов и диалогов.
Изменить
Открывает выбранный макрос или диалоговое окно для изменения.
Закрыть
Закрывает диалоговое окно и сохраняет все изменения.
Создать
Открывает редактор и создает новый модуль.
Создать
Открывает редактор и создает новое диалоговое окно.
Удалить
Удаляет выделенные элементы после подтверждения.
Вкладка "Библиотеки"
Служит для управления библиотеками макросов для текущего приложения и всех открытых документов.
Расположение
Служит для выбора приложения или документа, содержащего библиотеки макросов, которые требуется упорядочить.
Библиотека
Служит для отображения списка существующих библиотек макросов для текущего приложения и всех открытых документов.
Изменить
Позволяет открыть редактор Basic LibreOffice для изменения выбранной библиотеки.
Закрыть
Закрывает диалоговое окно и сохраняет все изменения.
Пароль
Служит для назначения или изменения пароля для выбранной библиотеки.
Создать
Служит для создания новой библиотеки.
Служит для ввода имени новой библиотеки или модуля.
Импорт
Найдите библиотеку Basic LibreOffice для добавления в текущий список и нажмите кнопку "Открыть".
Удалить
Удаляет выделенные элементы после подтверждения.
Чтобы открыть диалоговое окно "BeanShell Macros", выберите команду "Сервис - Макросы - Управление макросами - BeanShell". Чтобы открыть диалоговое окно "JavaScript", выберите команду "Сервис - Макросы - Управление макросами - JavaScript".
Экспорт
Открывает диалоговое окно для экспорта выбранной библиотеки в качестве расширения или в качестве библиотеки Basic.
Макросы
Выберите макрос или сценарий из "пользователь", "общие" или открытый документ. Чтобы просмотреть список доступных макросов или сценариев, дважды щелкните запись.
Выполнить
Чтобы выполнить сценарий, выберите его в списке, а затем нажмите кнопку "Выполнить".
Создать
Служит для создания нового сценария. После ввода имени сценария будет открыт использующийся по умолчанию редактор.
Введите имя для сценария.
Изменить
Открывает используемый по умолчанию редактор сценариев для данной операционной системы.
Переименовать
Открывает диалоговое окно, в котором можно изменить имя выбранного сценария.
Удалить
Предлагает удалить выбранный сценарий.
В диалоговом окне "Выбор макроса" имеется два списка, а именно список "Библиотека" и список "Имя макроса".
Библиотека
Выберите макрос или сценарий из вариантов "пользователь", "общий доступ" или открытый документ. Чтобы просмотреть содержимое библиотеки, дважды щелкните элемент в списке.
Я недавно перешел на pclinuxos из окон, и мне это нравится. Единственная проблема, с которой я столкнулся, заключается в том, что libreoffice, пакет электронных таблиц по умолчанию, несовместим с макросами Excel. Ниже приведен код vba, который у меня есть:
Есть ли способ преобразовать этот код, чтобы сделать его совместимым с libreoffice, или мне нужно выучить совершенно новый язык, например python? Изучение python не будет проблемой, но не является решением моей проблемы, поскольку у меня есть много файлов, связанных с работой, в excel, которые содержат много кода vba, и я не могу использовать открытый офис / libreoffice на работе .
Вы должны перевести части, которые управляют документом, чтобы использовать UNO API. К сожалению, это может быть сложно в зависимости от того, что делает ваш макрос. Основные утверждения работают напрямую. Как правило, при изменении документа этого не происходит.
Команда Cells возвращает определенную ячейку на основе строки и столбца. Итак, вам нужна текущая строка. Вот какое безумие получить активную ячейку:
Когда у вас есть активная ячейка, вы получаете адрес ячейки, а из него - строку. Вам вообще не нужно использовать диапазон, поскольку вас интересует только одна ячейка, поэтому вы получаете активный лист, а затем получаете конкретную ячейку из листа.
Примерно так: ThisComponent.getCurrentController (). GetActiveSheet (). GetCellByPosition (nCol, nRow) .getString () = "a"
Я не хочу разбираться в том, что это делает
Из файла интерактивной справки LibreOffice:
За некоторыми исключениями, Microsoft Office и LibreOffice не могут запускать один и тот же код макроса. Microsoft Office использует код VBA (Visual Basic для приложений), а LibreOffice использует код Basic, основанный на среде LibreOffice API (интерфейс прикладных программ). Хотя язык программирования тот же, объекты и методы разные.
Самые последние версии LibreOffice могут запускать некоторые сценарии Excel Visual Basic, если вы включите эту функцию в LibreOffice - PreferencesTools - Параметры - Загрузить / Сохранить - Свойства VBA.
На самом деле вам, скорее всего, придется сесть за LibreOffice API. и перепишем функционал.
Единственный автоматический инструмент, о котором я знаю, - это бизнес-таблицы (обратите внимание, что у меня нет личных или профессиональный опыт, или какое-либо отношение к сайту).
Это похоже на OpenOffice, но я думаю, что он работает и с LibreOffice.
В общем, лучше сделать это самому, инструмент далек от совершенства .
В LibreOffice 4.4 первая подпрограмма не будет работать вообще (я подозреваю, что все переменные начинаются с 'xl'. Две другие работают отлично, если вы измените ThisCell на ActiveCell.
Читайте также: