Параметр в e.parameter не определен - PullRequest
1 голос
/ 21 мая 2019

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

Вот ссылка на веб-приложение: https://script.google.com/macros/s/AKfycbwwQts-izTP6MTWRM64948Gskf6MMktO07bTw_55qD9kZXOy17c/exec

function doGet(e){

    Logger.log(e);
    var FS = e.parameter.Fname;
    var LS = e.parameter.Lname;

    savedata(FS,LS);

}

function savedata(FS,LS) {
  var date = new date(); //gets new date
  var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1f2oIAuOt8PoAEtQW5zr6GJDwpPKl8doKhmECDEaHXl4/edit#gid=0'; 

  var worksheet = ss.getSheetByName("logs1"); 
  var cur_row = worksheet.getLastRow() + 1; 

  worksheet.getActiveRange("A" + cur_row).setValue(cur_row); 
  worksheet.getActiveRange("B" + cur_row).setValue(date);
  worksheet.getActiveRange("C" + cur_row).SetValue(FS); 
  worksheet.getActiveRange("D" + cur_row).SetValue(LS); 

}

1 Ответ

1 голос
/ 21 мая 2019

Свойство параметра объекта события не может быть «неопределено» при получении запроса, поскольку объект события всегда имеет следующую структуру (без каких-либо параметров запроса):

{
"parameter":{},
"contextPath":"",
"contentLength":-1,
"queryString":"",
"parameters":{}
}

Поскольку вы получаете сообщение, что параметр не определенвы, скорее всего, попытаетесь запустить doGet() из редактора - вам не следует делать это, поскольку объект события создается только в том случае, если вы обращаетесь к URL-адресу из браузера или отправляете http-запрос программно (в последнем случае вообще не указывается запрос или опечатка)параметр не будет приводить и к этому сообщению).

Плюс, метод getActiveRange() не принимает никаких аргументов, может быть, вы имели в виду setActiveRange()?Если это так, вам также нужно обернуть каждую ссылку Range в worksheet.getRange(yourRangeString) (и рассмотреть возможность использования экономичного метода setValues(ArrayOfValues) вместо диапазона "A"+cur_row+":D"+cur_row).

В целом ваш код должен выглядеть следующим образом(минус тестовая функция getSelf ()):

/**
 * Http GET request Trigger;
 * @param {Object} event object;
 * @returns {String} content to respond to getSelf();
 */
function doGet(e) {

  var f = e.parameter.Fname;
  var s = e.parameter.Lname;

  doSomething(f,s);

  //doGet() must return either HtmlOutput or TextOutput
  var content = ContentService.createTextOutput(JSON.stringify({Fname:f,Lname:s}));
  return content;
}

/**
 * Test function to programmatically invoke doGet();
 */
function getSelf() {
  //test query;
  var query = '?Fname=alice&Lname=blue';

  //getService().getUrl() returns script's public Url;
  var resp = UrlFetchApp.fetch(ScriptApp.getService().getUrl()+query);
  Logger.log(JSON.parse(resp));
}

/**
 * Saves values to spreadsheet;
 * @param {String} a first content to set;
 * @param {String} b second content to set;
 */
function doSomething(a,b) {

  var date = new Date();
  var ss = SpreadsheetApp.openByUrl( yourSpreadUrl ); 

  var ws = ss.getSheetByName( yourSheet );
  var cur_row = ws.getLastRow() + 1;
  var cur_rng = 'A'+cur_row+':D'+cur_row;

  ws.setActiveRange(ws.getRange(cur_rng)).setValues([[cur_row,date,a,b]]);
}

Кстати, если вы хотите, чтобы другие могли иметь доступ к вашему текущему развертыванию, обязательно измените настройку публикации с «только я» на «кто-нибудь» или"любой, даже анонимный".

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