Google Script:如何检查单元格中数组的字符串值是否为true?
修正Google Script数组与单元格布尔值检查的问题
先看看你原代码里的几个关键问题:
- 语法错误:
if( People[0] == true);后面的分号会让if的执行体变成空语句,导致Logger.log("BOOKED")会无条件执行,同时else会因为没有对应的有效if而报错。 - 逻辑错误:直接把字符串(比如
'Amanda')和布尔值true比较,在JavaScript中'Amanda' == true永远是false——因为类型转换时true会转为数字1,而字符串'Amanda'会转为NaN,两者不相等。 - 循环未生效:用
for (var n in People)遍历数组,但全程没用到n,一直只检查People[0],等于没遍历整个数组。
假设你的需求是遍历数组中的每个名字,检查表格中对应名字的单元格是否标记为true(比如预订状态),下面是正确的实现代码:
function myFunction() { var People = ['Amanda', 'John']; // 获取当前活动工作表 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 获取表格所有数据(A列存名字,B列存布尔状态) var allData = sheet.getDataRange().getValues(); // 遍历每个人 People.forEach(function(person) { var isBooked = false; // 在表格数据中查找对应名字的行 for (var rowIndex = 0; rowIndex < allData.length; rowIndex++) { // 匹配A列的名字 if (allData[rowIndex][0] === person) { // 获取B列的布尔状态 isBooked = allData[rowIndex][1] === true; break; // 找到后跳出循环,不用继续找 } } // 根据状态输出日志 if (isBooked) { Logger.log(`${person}: BOOKED`); } else { Logger.log(`${person}: FREE`); } }); }
如果你的需求是检查某个特定单元格的值是否为数组中的名字,并以此判断状态(比如单元格内容是名字就视为BOOKED),可以用这个简化版本:
function myFunction() { var People = ['Amanda', 'John']; var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 假设检查A1单元格 var targetCellValue = sheet.getRange("A1").getValue(); People.forEach(function(person) { if (targetCellValue === person) { Logger.log(`${person}: BOOKED`); } else { Logger.log(`${person}: FREE`); } }); }
几个重要的修正点说明:
- 用
forEach遍历数组,比for...in更安全,避免遍历到数组的额外属性。 - 使用
===严格相等判断,避免类型转换带来的意外结果。 - 正确调用Google Script的表格API获取单元格数据,这是操作表格的核心步骤。
- 移除了if语句后的多余分号,确保代码块和判断条件正确关联。
内容的提问来源于stack exchange,提问作者Amazerhf
相关产品推荐
相关产品推荐

