Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google脚本DoGetTypeError:无法调用null的方法“getSheetByName”_Javascript_Google Apps Script - Fatal编程技术网

Javascript Google脚本DoGetTypeError:无法调用null的方法“getSheetByName”

Javascript Google脚本DoGetTypeError:无法调用null的方法“getSheetByName”,javascript,google-apps-script,Javascript,Google Apps Script,我有一个绑定电子表格的google apps脚本,我想使用doGet函数控制从外部发送的电子表格/邮件。基本上,用户在表单提交时会收到一封邮件,其中包含两个链接,我正在使用我的代码的开发版本进行尝试: https://script.google.com/a/macros/..mydomain.../s/...myID.../dev?line=6&answer=ok https://script.google.com/a/macros/..mydomain.../s/...myID.../

我有一个绑定电子表格的google apps脚本,我想使用doGet函数控制从外部发送的电子表格/邮件。基本上,用户在表单提交时会收到一封邮件,其中包含两个链接,我正在使用我的代码的开发版本进行尝试:

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);
}
但是我得到了标题中提到的打字错误。 日志正确地显示了ssId、sheetName、ss和ss.getName,因此我无法理解为什么getSheetByName方法不能正常工作。 有什么提示吗?
谢谢你的关注

你能试试下面的代码看看会发生什么吗

首先运行init,然后像以前一样使用带有参数的url

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;
}
使用此url我的测试Web应用程序:

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

第一张纸上的这个


您确定该函数名为getSheetByName吗?我所能想到的是,检索到的工作表名称与电子表格中实际工作表的名称不匹配,或者这是一个与实际问题不匹配的错误消息。硬编码工作表名称并注释掉除获得ss的行和按名称获得工作表的行以外的所有内容,然后看看会发生什么。。。感谢您的回答,我发现问题出在HandlerRequest函数上,我在其中使用了getActiveSpreadsheet方法。