Как я могу получить информацию из слабого диалогового окна для хранения в листах 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: "sheet" is not defined. (line 14, file "Code", project "Stand Up Form")</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
это служебный объект
Полезные ссылки