Изучаем основные приемы взаимодействия Google Apps Script с Документами.
Это наша вторая статья про Google Apps Script — подвиде JavaScript, обогащенном классами и методами для работы с сервисами Google. В первой четыре готовых рецепта, код которых можно вставить в редактор в практически неизменном виде, запустить и мгновенно получить PROFIT.
У этого материала несколько другая задача. Приведенные ниже примеры кода, предназначены скорее для обучения и размышления, чем для быстрого решения проблем. На основе приемов, использованных в этих скриптах можно составить множество классных программ для эффективного решения задач автоматизации работы с Docs. Чтобы не повторяться, для ознакомления с основами использования GAS рекомендуем прочитать статью 4 лайфхака Gmail и Google Apps Script.
Автоматическая генерация документов
Предположим, что вам нужно собрать отзывы о каком-либо событии от всех своих коллег и чтобы один сотрудник не мог видеть записи другого. Один из способов это сделать — создать для каждого человека файл в Google Docs и открыть доступ ему одному.
Для этого создаем новую таблицу в Google Docs, в первый столбец запишем фамилии сотрудников, а во второй их почтовые адреса. Проверяем информацию и запускаем код.
[jscript]function createFiles() {
currentSheet = SpreadsheetApp.getActiveSheet();
countDoc = 2; // Укажите здесь число респондентов в таблице
for (i=1;i<=countDoc;i++)
{
//Создаем документ и записываем в него текст
docName = currentSheet.getRange(‘A’+i).getValue();
doc = DocumentApp.create(docName);
body = doc.getBody();
finalText="Расскажите о своих впечатлениях о конференции, пожалуйста";
body.appendParagraph(finalText);
// Предоставляем человеку доступ к документу
docEditor = currentSheet.getRange(‘B’+i).getValue();
doc.addEditor(docEditor);
currentSheet.getRange(‘C’+i).setValue(doc.getId());
}
}[/jscript]
Проверяем содержимое документов
В день дедлайна, поставленного коллегам для оставления отзывов, необходимо проверить все ли коллеги выполнили просьбу. Открывать каждый документ и смотреть что в нем — избыточная суета. Лучше прочитать все файлы скриптом и записать их содержимое в одну таблицу, чтобы единым взором оценить ситуацию.
Код выполняется из таблицы, созданной в предыдущем примере, так как в ней записаны ID нужных нам документов. С помощью Google Apps Script можно открывать файлы идентифицируя их по имени, дате создания, содержимому и т.д. Но работа с Google Drive тема отдельной подробной статьи, которая появиться на iphones.ru в ближайшее время.
Перед запуском скрипта надо убедиться, что значения в третьем столбце похожи на те, которые изображены на скриншоте.
[jscript]function checkFiles() {
currentSheet = SpreadsheetApp.getActiveSheet();
countDoc = 2; // Укажите здесь число респондентов в таблице
for (i=1;i<=countDoc;i++)
{
// Открываем документ по уникальному идентификатору (в Google Drive может быть два файла с одинаковым именем в каталоге)
docID = currentSheet.getRange(‘C’+i).getValue(); ;
doc = DocumentApp.openById(docID);
// Получаем его текст и записываем в четвертый столбец
text = doc.getBody().getText();
currentSheet.getRange(‘D’+i).setValue(text);
}
}[/jscript]
Собираем текст нескольких документов в один
После того как мы удостоверились, что все коллеги оставили отзывы, необходимо собрать их все в один текстовый файл, чтобы на его основе составить итоговый отчет. Скрипт выполняется из той же таблицы, что и предыдущие два фрагмента кода.
[jscript]function collectFiles() {
currentSheet = SpreadsheetApp.getActiveSheet();
countDoc = 2; // Укажите здесь число респондентов в таблице
finalText="";
endDoc = DocumentApp.create(‘Все отзывы’);
for (i=1;i<=countDoc;i++)
{
docID = currentSheet.getRange(‘C’+i).getValue();
doc = DocumentApp.openById(docID);
text = doc.getBody().getText();
body = endDoc.getBody();
// Вставляем в файл "Все отзывы" текст с отзывом респондента
body.appendParagraph(currentSheet.getRange(‘A’+i).getValue() +" – " +text);
}
}[/jscript]
Автоматическое форматирование
Теперь немного оживим внешний вид нашего текста. Нечетные абзацы сделаем черным шрифтом на красном фоне, а четные жирным красным шрифтом без фона. Для этого нам надо создать два массива с параметрами стилей, перебрать абзацы один за другим, проверить их на четность/нечетность и применить к каждому соответствующий набор стилей.
[jscript]function autoFormat()
{
doc = DocumentApp.getActiveDocument();
docText = doc.getBody();
var styleOne = {};
styleOne[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.RIGHT;
styleOne[DocumentApp.Attribute.FONT_FAMILY] = ‘Arial’;
styleOne[DocumentApp.Attribute.FONT_SIZE] = 16;
styleOne[DocumentApp.Attribute.FOREGROUND_COLOR]="#FF0000";
var styleTwo = {};
styleOne[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.RIGHT;
styleOne[DocumentApp.Attribute.FONT_FAMILY] = ‘Calibri’;
styleOne[DocumentApp.Attribute.FONT_SIZE] = 14;
styleOne[DocumentApp.Attribute.BOLD] = true;
styleOne[DocumentApp.Attribute.BACKGROUND_COLOR]="#FF0000";
paragraphs = docText.getParagraphs();
// Перебираем все абзацы документа
for (i=1; i<=paragraphs.length-1;i++)
{
if(i & 1)
{
paragraphs[i].setAttributes(styleOne);
}
else
{
paragraphs[i].setAttributes(styleTwo);
}
}
}[/jscript]
- 4 лайфхака Gmail и Google Apps Script
- Автоматизируем Google Таблицы на Google Apps Script
- Планируем жизнь с Google Calendar и Google Apps Script
- Простые автоматизации для Google Drive
1 комментарий
Форум →Ирина здравствуйте.
Благодарю за примеры скриптов.
Можете подсказать как получить в столбце С активную ссылку или полный адрес генерируемого документа (вместо 1V1WjNpLYnDPVESPeVkBa6g5CqncXfLyb7aKJ6ywERVw)? В примере автоматической генерации документов. Как вывести кнопки запуска скрипта в меню Гугл таблицы? Спасибо.
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Можно ли подключить одни Apple Watch к двум iPhone? (Устарело)
Как смотреть фото на iPhone или iPad в режиме слайд-шоу
Стоит ли сейчас покупать новый MacBook Pro
Почему iPhone не предлагает поделиться паролем от Wi-Fi
Включаем автоматическую смену часового пояса на iPhone
Как подключить OneDrive в качестве сетевого диска на Mac?
Можно ли заряжать MacBook двумя зарядками одновременно
Как увеличить масштаб экрана на Apple Watch