Недавно мой друг Педро Робсон Леао начал возиться со скриптами приложений 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>&nbsp;";
    }
  }
     
  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.

Любые мысли или комментарии просто дайте мне знать;)