e.parameter中的参数未定义

时间:2019-05-21 11:56:10

标签: javascript google-apps-script google-sheets

我不断收到一条消息,提示未定义参数。我究竟做错了什么?我是Google Appscript的新手,我只是想构建一个简单的Web应用程序,将“名字”和“姓氏”存储到电子表格中。

以下是网络应用程序的链接:https://script.google.com/macros/s/AKfycbwwQts-izTP6MTWRM64948Gskf6MMktO07bTw_55qD9kZXOy17c/exec

lost

1 个答案:

答案 0 :(得分:1)

在获取请求时不能“未定义”事件对象的parameter属性,因为事件对象始终具有以下结构(没有任何查询参数):

{
"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]]);
}

顺便说一句,如果您希望其他人能够访问您当前的部署,请确保将发布设置从“仅我自己”更改为“任何人”或“任何人,甚至匿名”。