Google脚本doGet TypeError:无法调用null的方法“getSheetByName”

时间:2015-05-15 15:52:19

标签: javascript google-apps-script

我有一个电子表格绑定谷歌应用程序脚本,我想使用doGet函数来控制从外部发送的电子表格/邮件。基本上用户使用两个链接获取邮件onFormSubmit(我正在尝试使用我的代码的开发版本):

https://script.google.com/a/macros/..mydomain.../s/...myID.../dev?line=6&answer=ok
https://script.google.com/a/macros/..mydomain.../s/...myID.../dev?line=6&answer=no

该功能如下:

function doGet(e){
  var sp = PropertiesService.getScriptProperties();
  var ssId = sp.getProperty('thisSpreadsheet');
  var sheetName = sp.getProperty('richiestaFerieSheetName');
  Logger.log(ssId + ' ' + sheetName)
  var ss = SpreadsheetApp.openById(ssId);
  Logger.log(ss + ' ' + ss.getName());
  var foglioRichiestaFerie = ss.getSheetByName(sheetName);
  foglioRichiestaFerie.setActiveRange((foglioRichiestaFerie.getRange(e.parameter.line, 1)));
  handleRequest(e.parameter.answer=='ok' ? true : false, false);
}

但是我得到了标题中提到的TypeError。 日志正确显示了ssId,sheetName,ss和ss.getName(),因此我无法理解为什么getSheetByName方法无法正常工作。
任何提示?
谢谢你的关注!

1 个答案:

答案 0 :(得分:0)

您可以尝试下面的代码,看看会发生什么吗?

首先运行init然后使用带参数的网址。

function init(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  PropertiesService.getScriptProperties().setProperty('richiestaFerieSheetName',ss.getSheets()[0].getName());
  PropertiesService.getScriptProperties().setProperty('thisSpreadsheet',ss.getId());
}

function doGet(e){
  var sp = PropertiesService.getScriptProperties();
  var ssId = sp.getProperty('thisSpreadsheet');
  var sheetName = sp.getProperty('richiestaFerieSheetName');
  Logger.log(ssId + ' ' + sheetName)
  var ss = SpreadsheetApp.openById(ssId);
  Logger.log(ss + ' ' + ss.getName());
  var foglioRichiestaFerie = ss.getSheetByName(sheetName);
  foglioRichiestaFerie.setActiveRange((foglioRichiestaFerie.getRange(e.parameter.line, 1))).setValue('succes');
  var answer = handleRequest(e.parameter.answer=='ok' ? true : false, false);
  return ContentService.createTextOutput(answer).setMimeType(ContentService.MimeType.TEXT);
}

function handleRequest(result){
  Logger.log('result = '+result);
  return 'result is '+result;
}

使用此网址(我的测试网络应用): https://script.google.com/a/macros/insas.be/s/AKfycbxsbr6uBB1B22uYUipmSG-blLVrJ0JB_hmFBy3kLGt7ZQlI8pw/exec?line=6&answer=ok

您应该在浏览器中获得此结果:

enter image description here

和第一张中的这个

enter image description here