Google Apps Script позволяет программно создавать и изменять Google Docs, а также настраивать пользовательский интерфейс с помощью новых меню, диалоговых окон и боковых панелей.
Основы
Apps Script может взаимодействовать с Google Docs двумя основными способами: любой скрипт может создавать или изменять документ, если у пользователя скрипта есть соответствующие разрешения для этого документа, а также скрипт может быть привязан к документу, что даёт ему особые возможности для изменения пользовательского интерфейса или реагирования на открытие документа. Чтобы создать скрипт, привязанный к контейнеру, из Google Docs, выберите «Расширения» > «Apps Script» .
В любом случае взаимодействовать с документом Google Docs через службу документов Apps Script очень просто, как показано в следующем примере.
function createDoc() { var doc = DocumentApp.create('Sample Document'); var documentTab = doc.getTab('t.0').asDocumentTab(); var body = documentTab.getBody(); var rowsData = [['Plants', 'Animals'], ['Ficus', 'Goat'], ['Basil', 'Cat'], ['Moss', 'Frog']]; body.insertParagraph(0, doc.getName()) .setHeading(DocumentApp.ParagraphHeading.HEADING1); table = body.appendTable(rowsData); table.getRow(0).editAsText().setBold(true); }
Приведённый выше скрипт создаёт новый документ в Google Диске пользователя, затем извлекает вкладку с идентификатором t.0
(первая вкладка по умолчанию), вставляет абзац с тем же текстом, что и название документа, оформляет этот абзац как заголовок и добавляет таблицу на основе значений двумерного массива. Скрипт может с таким же успехом внести эти изменения в существующий документ, заменив вызов DocumentApp.create()
на DocumentApp.openById()
или openByUrl()
. Для скриптов, созданных внутри документа (с привязкой к контейнеру), используйте DocumentApp.getActiveDocument()
и Document.getActiveTab()
.
Структура документа
С точки зрения Apps Script, документ Google Docs структурирован во многом подобно HTML-документу, то есть документ состоит из одного или нескольких объектов Tab
, каждый из которых содержит элементы (например, Paragraph
или Table
), которые, в свою очередь, часто содержат другие элементы. Большинство скриптов, изменяющих документ Google Docs, начинаются с вызова getTab()
и asDocumentTab()
, за которыми следует getBody()
, поскольку Body
— это основной элемент, содержащий все остальные элементы вкладки, за исключением HeaderSection
, FooterSection
и любых Footnotes
.
Однако существуют правила, определяющие, какие типы элементов могут содержать элементы других типов. Более того, служба документов в Apps Script может вставлять элементы только определённых типов в другие элементы. Дерево ниже показывает, какие элементы могут содержаться в элементах определённого типа.
Элементы, выделенные жирным шрифтом, можно вставлять; невыделенные элементы можно изменять только на месте.
- Документ
- Вкладка
- DocumentTab
- Тело
- ListItem
- Уравнение
- УравнениеФункция
- УравнениеФункция ...
- УравнениеФункцияАргументРазделитель
- Символ уравнения
- Текст
Замена текста
Apps Script часто используется для замены текста в Google Docs. Предположим, у вас есть электронная таблица с информацией о клиентах, и вы хотите создать персонализированный Google Docs для каждого клиента. (Эту операцию часто называют слиянием почты.)
Существует множество способов замены текста, но самый простой — метод replaceText()
показанный в примере ниже. replaceText
поддерживает большинство функций регулярных выражений JavaScript. Первая функция ниже добавляет несколько строк текста-заполнителя в Google Docs; в реальной жизни вы, скорее всего, введете эти текст-заполнители в документ самостоятельно. Вторая функция заменяет текст-заполнитель свойствами, определёнными в client
объекте.
Обратите внимание, что обе эти функции используют методы getActiveDocument()
и getActiveTab()
, которые применяются только к скриптам, созданным внутри документа Google Docs; в автономном скрипте вместо этого используйте DocumentApp.create()
, openById()
или openByUrl()
в сочетании с Document.getTab()
.
Добавьте несколько заполнителей
function createPlaceholders() { var body = DocumentApp.getActiveDocument().getActiveTab().asDocumentTab().getBody(); body.appendParagraph('{name}'); body.appendParagraph('{address}'); body.appendParagraph('{city} {state} {zip}'); }
Заменить заполнители
function searchAndReplace() { var body = DocumentApp.getActiveDocument().getActiveTab().asDocumentTab().getBody(); var client = { name: 'Joe Script-Guru', address: '100 Script Rd', city: 'Scriptville', state: 'GA', zip: 94043 }; body.replaceText('{name}', client.name); body.replaceText('{address}', client.address); body.replaceText('{city}', client.city); body.replaceText('{state}', client.state); body.replaceText('{zip}', client.zip); }
Пользовательские меню и пользовательские интерфейсы
Вы можете настроить Google Docs, добавив меню, диалоговые окна и боковые панели. Однако имейте в виду, что скрипт может взаимодействовать только с пользовательским интерфейсом текущего экземпляра открытого документа и только если он привязан к документу.
Узнайте, как добавлять пользовательские меню и диалоговые окна в Google Docs. Подробнее о создании пользовательских интерфейсов для диалоговых окон или боковых панелей см. в руководстве по HTML Service . Если вы планируете опубликовать свой пользовательский интерфейс как часть дополнения , следуйте руководству по стилю, чтобы обеспечить соответствие стилю и макету редактора Google Docs.
Дополнения для Google Docs
Дополнения работают внутри Google Docs и могут быть установлены из магазина дополнений Google Docs. Если вы разработали скрипт для Google Docs и хотите поделиться им со всем миром, Apps Script позволяет опубликовать ваш скрипт как дополнение, чтобы другие пользователи могли установить его из магазина дополнений.
Чтобы узнать, как создать дополнение для Google Docs, см. Краткое руководство по созданию дополнений для Google Docs .
Триггеры
Скрипты, привязанные к Google Docs, могут использовать простой триггер для реагирования на событие onOpen
документа, которое происходит всякий раз, когда пользователь, имеющий право на редактирование документа, открывает его в Google Docs.
Чтобы настроить триггер, просто напишите функцию onOpen()
. Пример такого триггера см. в разделе «Пользовательские меню в Google Workspace» . Хотя простой триггер полезен для добавления меню, он не может использовать службы Apps Script, требующие авторизации.