这应该很容易修复。谷歌表格抛出一个错误,指出它"无法读取属性'getName'为null"。到目前为止,这段代码一直工作得很好,所以我不确定是什么破坏了它。任何输入的错误是什么,这里将非常感激!希望这不是一个太棘手的解决方案。
function updateSheet(sheetName, cellAddress) {
// var range = e.range; // range just edited
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (sheet.getName() !== sheetName) {
return;
}
var date = new Date();
date = Utilities.formatDate(date, "GMT-08:00", "MM/dd/yy");
sheet.getRange(cellAddress).setValue("Last Edited: "+ date.toString());
}
Issue:
根据官方文档getSheetByName返回null
,如果没有给定名称的表,这也是你的问题的原因,因为你实际上调用null.getName()
。
解决方案:
如果名称为sheetName
的表不存在,则退出该函数:
替换:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (sheet.getName() !== sheetName) {
return;
}
:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
return;
}
在这种情况下,您的第一个条件似乎是不必要的。您使用sheetName获取工作表,然后尝试检查所获取的工作表的名称是否为sheetName。
如果你想有一个检查如果你的getSheetByName()返回一个工作表,你可以试试这个:
if(!sheet){
return;
}
尝试检查对象中是否存在getName属性
function updateSheet(sheetName, cellAddress) {
// var range = e.range; // range just edited
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
//Try checking if the getName property even exist in the object
if (sheet.getName() && sheet.getName() !== sheetName) {
return;
}
var date = new Date();
date = Utilities.formatDate(date, "GMT-08:00", "MM/dd/yy");
sheet.getRange(cellAddress).setValue("Last Edited: "+ date.toString());
}
显而易见的答案是SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
返回null。唯一的参数是sheetName,所以我猜工作表被重命名或删除。