Javascript Google脚本DoGetTypeError:无法调用null的方法“getSheetByName”
我有一个绑定电子表格的google apps脚本,我想使用doGet函数控制从外部发送的电子表格/邮件。基本上,用户在表单提交时会收到一封邮件,其中包含两个链接,我正在使用我的代码的开发版本进行尝试: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.../
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方法。