Как я могу получить информацию из слабого диалогового окна для хранения в листах Google?

Я пытаюсь создать простой диалог, который будет принимать ответы от членов команды о том, над чем они работают, и хранить эту информацию в листах Google. У меня работает диалоговое окно, но я не уверен, как записать информацию в листы Google с помощью Google App Script.

Я уже попробовал приведенный ниже код, но вместо того, чтобы получать какую-либо информацию в ячейке A1, как я ожидал, я просто возвращаю ответ HTML в спокойной обстановке.

function doGet(e) {  
  return ContentService.createTextOutput("I am alive");
}

function doPost(e) {    
  var params = e.parameter;
  var token = params.token;
  var text = params.text;
  var trigger_id = params.trigger_id;
  var slackUrl = "https://slack.com/api/dialog.open";

  if (typeof e !== 'undefined') { 
    var ss = SpreadsheetApp.openById(SHEET_ID);
    sheet.getRange(1,1).setValue(JSON.stringify(e)); 
  }

  var dialog = {
    "token": TOKEN, 
    "trigger_id": trigger_id,
    "dialog": JSON.stringify({
      "callback_id": "ryde-46e2b0",
      "title": "Submit a Slack-Update",
      "submit_label": "Update",
      "elements": [
        {
          "type": "text",
          "label": "Yesterday",
          "name": "yesterday",
          "placeholder": "What did you finish yesterday?"
        }
  }
  var options = {
    'method' : 'post',
    'payload' : dialog,
  }; 
  UrlFetchApp.fetch(slackUrl, options);
  return ContentService.createTextOutput("");
} 

вместо того, чтобы открыть мой диалог и затем записать ответ, я получаю следующий ответ вяло:

<!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Error</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body style="margin:20px"><div><img alt="Google Apps Script" src="//ssl.gstatic.com/docs/script/images/logo.png"></div><div style="text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px">ReferenceError: &quot;sheet&quot; is not defined. (line 14, file &quot;Code&quot;, project &quot;Stand Up Form&quot;)</div></body></html>

Мне просто нужно знать, как получить ответы на каждое поле диалога, чтобы появиться в листе Google. Сейчас у меня все отображается в ячейке A1, но реально я хочу, чтобы имя пользователя отображалось в 1A, дата в 1B и ответы в 1C-E.

Я также хотел бы добавить некоторые функциональные возможности, чтобы добавить следующий ответ в следующую пустую строку, а не всегда вставлять в 1А. Тем не менее, основной смысл этого поста заключается в том, чтобы получить ответ, который появится в листах Google.

Заранее благодарю за любую помощь. Я программист на Python, поэтому я не очень хорош в JavaScript.

1 ответ

проблема

Полученный HTML-ответ является страницей с ошибкой - если вы внимательно изучите ее (или, проще, проанализируете), вы увидите точную причину возникновения проблемы:

ReferenceError: "sheet" is not defined

Решение

Как я уже упоминал в комментарии, для его решения вам необходимо получить доступ к Sheet первое (электронные таблицы в Документах Google имеют следующую структуру: Spreadsheet -> Sheet -> Range).

Образец

Простая строка должна сделать свое дело (обратите внимание, что, поскольку объект события всегда имеет тип object если есть, вы можете сделать ярлык - кстати, undefined проверка избыточна в doPost() функция).

  var ss = SpreadsheetApp.openById(SHEET_ID);
  var sheet = ss.getSheetByName('yourSheetName');
  sheet.getRange(1,1).setValue(JSON.stringify(e)); 

Я бы также предложил хранить только parameter или же parameters значения свойств с e это служебный объект

Полезные ссылки

  1. getSheetByName() ссылка;
  2. getSheets() ссылка;
Другие вопросы по тегам