HTTP获取Google电子表格,“e undefined”

时间:2014-02-15 14:09:18

标签: google-apps-script google-sheets http-get

我正在尝试在Google电子表格中使用HTTP Get,以便能够为工作表中的特定单元格创建URL。我一直在寻找如何做到这一点,我尝试过使用this wayGET部分)。

以下是我放在一起的代码:

function doGet(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Kunder");
  var row = e.parameter["row"];
  var col = e.parameter["col"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(row, col);
  SpreadsheetApp.setActiveSheet(sheet);
  SpreadsheetApp.setActiveRange(range);
}

这是一个例子URL

https://docs.google.com/spreadsheets/d/[spreadsheet ID]/edit?row=5&col=1

当我运行脚本时,我收到此错误:

TypeError: Cannot read property "parameter" from undefined.

我做错了什么?或者不可能?

提前致谢,奥斯卡

EDIT
这是我目前的代码:

function doGet(e){
  var ss = SpreadsheetApp.openById("[id]");
  SpreadsheetApp.setActiveSpreadsheet(ss);
  var sheet = ss.getSheetByName("Kunder");
  var row = Number(e.parameter.row);
  var col = Number(e.parameter.col);

  var range = sheet.getRange(row, col);
  SpreadsheetApp.setActiveSheet(sheet);
  SpreadsheetApp.setActiveRange(range);
}

代码运行但以

结束
The script completed but did not return anything.

我想打开电子表格,然后根据GET参数设置有效范围。

1 个答案:

答案 0 :(得分:2)

您显示的网址无效。

要使用这种脚本,您必须将脚本部署为webapp,并使用带有参数的结果.exec url。

最后它将如下所示:

https://script.google.com/macros/s/AKfycbygwUwXXXXXXXXxJcKpBvsbflmnZ0Uqfu-JISWTZNvar32s3v_hl/exec?row=5&col=1

编辑:在该上下文中将没有activeSheet,而是使用openByIdopenByUrl。 您为行和列获取的值也是字符串,您应该将它们设为整数并使用普通sheet.getRange(row,col)来选择范围。

EDIT2:

这个网址:

https://script.google.com/macros/s/AKfycbwZbGW6E483BUplvLjCjNCXKjjiRorqzR9lruSydogeuU-YIvID/exec?row=1&col=1

和这段代码:

function doGet(e){
  var ss = SpreadsheetApp.openById("1sbJXuEpL_88-u-Bm4QOCAM3SVddFwZKI0c1kxeRpcos");
  var sheet = ss.getSheetByName("Sheet1");
  var row = Number(e.parameter.row); 
  var col = Number(e.parameter.col); 
  var range = sheet.getRange(row, col);
  sheet.getRange(row, col).setValue('test ok')
}

写入this sheet:查看单元格A1或测试另一行和列。

您确实会收到一条消息,表示没有返回任何内容,这确实是真的!我们不会在该代码中返回任何内容,这只是一个演示; - )


编辑3:正如评论中所提到的,要获得此功能返回的内容,您必须重新设置某些内容......

以下是一个例子:

function doGet(e){
  var ss = SpreadsheetApp.openById("1sbJXuEpL_88-u-Bm4QOCAM3SVddFwZKI0c1kxeRpcos");
  var sheet = ss.getSheetByName("Sheet1");
  var row = Number(e.parameter.row); 
  var col = Number(e.parameter.col); 
  var range = sheet.getRange(row, col);
  var value = sheet.getRange(row, col).getValue();
  sheet.getRange(row, col).setValue('test ok');
  var stringValue = value==''?'empty':value;
  Logger.log(stringValue);
  return ContentService.createTextOutput(stringValue).setMimeType(ContentService.MimeType.TEXT);
}