Недавно мой друг Педро Робсон Леао начал возиться со скриптами приложений Google и создал скрипт, который получает данные json в http-запросах и сохраняет эти данные в электронной таблице Google, и теперь этот скрипт работает как наша система инвентаризации: )
Итак, я решил попробовать.
В Google Docs вы можете прикрепить к любому документу скрипт, который выполняет задачи, похожие на VBScripts в Microsoft Office, хотя, в отличие от Microsoft, скрипты запускаются на движке Chrome v8 JavaScript и имеют доступ к Google Docs API, чтобы вы могли изменять, автоматизировать, писать и читать документы, единственные предварительные требования - это учетная запись Google и базовые знания JavaScript.
Меньше разговоров и больше действий.
В своей учетной записи Google откройте свой Google Диск и создайте новую электронную таблицу:
Внутри вашей электронной таблицы создайте новые листы и для каждого из них добавьте текст в ячейку «A1»:
Видишь, что я там делал? гул? Ага, HTML-теги ... (Хорошо, я старая школа ...)
Теперь для кода перейдите в Инструменты ›Редактор скриптов.
Эта команда откроет новый редактор сценариев:
Здесь происходит волшебство: вы можете написать JavaScript, который имеет доступ ко всему в вашей электронной таблице. Чтобы продемонстрировать некоторые возможности, давайте напишем базовое приложение, которое использует данные из электронной таблицы для визуализации простой веб-страницы.
В редакторе скриптов в code.gs вставьте следующий код (пока не беспокойтесь о коде, подробнее об этом позже):
function doGet(e) { return HtmlService.createHtmlOutputFromFile("index.html"); } function getSheetData(sheetName){ let sheet; if (this.sheet == null) { this.sheet = SpreadsheetApp.getActiveSpreadsheet(); } return this.sheet.getSheetByName(sheetName).getRange("A1").getValues()[0][0]; } function getSheetTabsNames(){ let pages; if (this.sheet == null) { this.pages = SpreadsheetApp.getActiveSpreadsheet().getSheets(); } let pageNames = []; for(var i = 0; i<this.pages.length;i++){ pageNames[i]=(this.pages[i].getName()); } return pageNames; }
Теперь создайте новый HTML-файл с именем index.html: Файл ›Новый› HTML-файл.
Новый файл будет показан на левой панели, щелкните здесь и вставьте следующий код:
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <script> function writeToDiv(text){ google.script.run.withSuccessHandler((data)=>document.getElementById("content").innerHTML=data).getSheetData(text) } function createLinks(links){ for(var i=0;i<links.length;i++){ document.getElementById("links").innerHTML+="<a onClick=writeToDiv('"+links[i]+"')>"+links[i]+"</a> "; } } function getLinks(){ google.script.run.withSuccessHandler((names)=>createLinks(name)).getSheetTabsNames(); } </script> <body onLoad="getLinks()"> <div id="content"></div> <div id="links"></div> </body> </html>
Код, который мы только что написали, получит все листы, которые у нас есть в нашей электронной таблице, и для каждого из них будет создана ссылка, когда мы щелкнем по этим ссылкам, содержимое ячейки «A1» будет отображаться на экране; Но сначала нам нужно опубликовать наш скрипт:
В редакторе сценариев выберите Опубликовать ›Развернуть как веб-приложение.
Вам будет представлен диалог:
Введите описание в первое поле, в третьем выберите Любой, даже анонимный, затем Развернуть
Во втором диалоговом окне вас попросят проверить ваше разрешение, поскольку вашему новому приложению требуется доступ к вашему диску Google:
Нажмите Просмотреть разрешения, выберите свою учетную запись, затем перейдите к Дополнительно.
Перейдите к ‹Название проекта› и, наконец, щелкните Разрешить:
Это оставит вас с другим диалоговым окном, но теперь у вас есть URL-адрес, который вы можете попробовать:
Откройте URL:
Каждая ссылка на странице представляет собой лист в электронной таблице, вы можете изменить данные в ячейке 'A1' и щелкнуть соответствующую ссылку.
Мы сделали очень простое приложение, которое потребляет данные из электронной таблицы, но мы можем добавлять данные, мы можем использовать любые другие типы документов и даже Gmail.
Возвращаясь к коду, я не буду делать учебник по Java Script, их много, но есть некоторые строки, которые нам нужно проверить:
code.gs
doGet(e)
Эта функция вызывается, когда скрипт получает HTTP-запрос, так как при вызове URL-адреса вашего проекта переменная e будет содержать все данные по GET-запросу.
SpreadsheetApp.getActiveSpreadsheet();
Возвращает текущую прикрепленную таблицу, отсюда вы можете читать и записывать данные в электронную таблицу.
return this.sheet.getSheetByName(sheetName).getRange("A1").getValues()[0][0];
Верните лист по его имени и из него получите все ячейки в диапазоне 'A1', диапазон также может быть значениями X и Y, например, getRange (0,0); getValues [0] [0] возвращает значение из ячейки в первой строке первого столбца.
index.html
google.script.run.withSuccessHandler((data)=>document.getElementById("content").innerHTML=data).getSheetData(text)
google.script.run.myfunction () - это способ, которым Google позволяет вызывать ваш сервер, в данном случае скрипт code.gs; В этом случае я использую метод whitSuccessHandler () с функцией стрелки, поэтому getSheetData может возвращать значения.
Все остальное - это простой JavaScript для управления страницей и рендеринга содержимого.
Как видите, эта платформа отличается гибкостью и открывает для GSuite целый новый мир возможностей: вы можете создать форму Google, которая будет отправлять электронные письма после завершения работы с документами и так далее. Педро Робсон Леао написал красивую статью об использовании этого в качестве простой инвентаризации оборудования, сочетающей скрипты Google с PowerShell.
Любые мысли или комментарии просто дайте мне знать;)