Дополнительные манипуляции со строками листа Google после добавления данных с помощью doPost - PullRequest
0 голосов
/ 07 июля 2019

Я добавляю строку в таблицу Google из простой HTML-формы, используя fetch / doPost, и мне нравится обрабатывать новую строку с помощью функции скрипта.

Код взят из GitHub (jamiewilson / form-to-google-sheet)

html part:
fetch(scriptURL, {method: 'POST', body: new FormData(form)})
.then(response => showSuc())
.catch(error => alert('Error! ' + error.message))

GScript part:
function doPost (e) {
  var lock = LockService.getScriptLock()
  lock.tryLock(10000)
  try {
    var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    var sheet = doc.getSheetByName(sheetName)
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    var nextRow = sheet.getLastRow() + 1
    var newRow = headers.map(function(header) {
      return header === 'timestamp' ? new Date() : e.parameter[header]
    })
    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
    // Browser.msgBox("posted");
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)
  }
  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }
  finally {
    lock.releaseLock()
  }
// Browser.msgBox("posted");
}

Поскольку добавление данных таким образом не вызывает срабатывания onEdit или onChange, я постараюсь выяснить, где в doPost разместить вызов функции, которая будет обрабатывать новую строку.Оба Browser.msgBox (прокомментированный в вышеприведенном примере) не показывают ни вывода, ни вызова моей функции, размещенного там.Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

@ St3ph Спасибо за вашу помощь! Тайна теперь раскрыта :-) В html-части у меня есть меню для выбора таблицы Google, куда отправляются данные. Все 3 таблицы в этом меню одинаково подготовлены, и каждая таблица имеет свой уникальный https://script.google.com/macros/s/table__key/exec.. По какой-то причине doPost выполняется из таблицы 2, которая в хронологическом порядке была создана через несколько дней после таблицы 1 и fiew. дней до Таблицы 3. Все функции «постобработки», которые я включил в Таблицу 1 (где приведены соответствующие данные для них), работают нормально, как показано в меню в таблице. Я полностью прокомментировал doPost таблицы 1 и таблицы 3, и все 3 таблицы продолжают получать данные, как и раньше. При публикации всех 3 приложений (для моих 3 таблиц) я использовал свои учетные данные и выбрал анонимный запуск в соответствии с GitHub - jamiewilson / form-to-google-sheet. Очевидно, есть некоторые дубликаты, которые вызывают странное поведение.

0 голосов
/ 08 июля 2019

Как публикуется ваше веб-приложение?Когда вы опубликовали свое веб-приложение, вы можете выбрать запуск с использованием ваших учетных данных или учетных данных пользователя. Затем выберите запуск анонимно или нет.

Простой способ выполнить это - запустить приложение с учетными данными.и анонимным пользователем.Но если вы делаете выборку с веб-страницы в JS, она не будет работать.Вам придется использовать JSONP, чтобы избежать «междоменных проблем».

Другим решением является использование API сценариев приложений из Javascript.

Отправка данных публикации в сценарий, опубликованный для запуска от имени пользователя.анонимно может быть сделано только из сценария на стороне сервера.Для JS это 2 решения выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...