1

我正在尝试构建一个松弛对话框,该对话框将接受团队成员关于他们正在做什么的回复,并将该信息存储在谷歌表格中。我的对话框正在工作,但我不确定如何使用 Google App Script 在 google 表格中捕获信息。

我已经尝试过下面的代码,但我没有像我期望的那样在单元格 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("");
} 

我没有让我的对话框打开然后记录响应,而是在 Slack 中得到以下响应:

<!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>

我只需要知道如何让对话框的每个字段的响应出现在谷歌表中。现在我的所有内容都出现在单元格 A1 中,但实际上我希望用户名出现在 1A 中,日期出现在 1B 中,响应出现在 1C-E 中。

我还想添加一些功能来将下一个响应添加到下一个空行,而不是总是粘贴在 1A 中。然而,这篇文章的主要目的只是让响应出现在谷歌表格中。

我是一名 python 程序员,所以我的 JavaScript 不是很好。

4

1 回答 1

2

问题

你得到的 HTML 响应实际上是一个错误页面——如果你仔细检查它(或者,更容易,解析它),你会看到问题发生的确切原因:

ReferenceError:未定义“工作表”

解决方案

要解决它,您需要访问第sheet一个(Google Docs 中的电子表格结构为: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)); 

我还建议只存储parameterorparameters属性值,因为e它是一个实用程序对象,并且每次请求到达您的应用程序时都会动态构造。

参考

  1. getSheetByName() 参考
  2. getSheets() 参考
于 2019-08-12T14:31:44.507 回答