如何检测单元格区域C8:D60是否已解锁以避免脚本报错?
解决Google Sheets脚本解锁区域时的报错问题
你的脚本报错是因为当C8:D60区域没有保护时,matchingProtections数组为空,matchingProtections[0]会返回undefined,此时调用remove()自然会触发类型错误。
只需要在调用remove()前,先判断是否存在对应的保护对象即可。修改后的代码如下:
function UnlockFriday() { var spreadsheet = SpreadsheetApp.openById('al;dskfjlasdjfl;asdfl;jkasf'); var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.RANGE); var matchingProtections = allProtections.filter(function(existingProtection) { return existingProtection.getRange().getA1Notation() == 'C8:D60'; }); // 先检查是否找到对应的保护,再执行移除操作 if (matchingProtections.length > 0) { var protection = matchingProtections[0]; protection.remove(); } };
关键修改说明
- 新增对
matchingProtections.length的判断:只有数组长度大于0时,才说明目标区域存在保护,这时再执行移除操作 - 移除了不必要的
activate()调用:解锁区域不需要预先激活单元格,直接操作保护对象即可完成需求
内容的提问来源于stack exchange,提问作者PT109
相关产品推荐
相关产品推荐

