如何解决"Cannot read property 'getName' of null"错误?



这应该很容易修复。谷歌表格抛出一个错误,指出它"无法读取属性'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,所以我猜工作表被重命名或删除。