用于在电子表格单元格中切换布尔值的函数

时间:2014-01-01 00:44:13

标签: google-apps-script google-sheets

我希望此函数将单元格D38中的布尔值从true切换为false,或从false切换为true

function changeState() {
  var a=SpreadsheetApp.getActiveSheet().getRange('D38');
  a=!a;
  SpreadsheetApp.getActiveSheet().getRange('D38').setValue(a);
};

它目前没有按我的意愿行事:它会将TRUE转换为FALSE,但无论如何都不会将FALSE转换为TRUE

为什么它会像这样,我该如何解决?

1 个答案:

答案 0 :(得分:4)

从文档中,getRange返回Range类型的对象。问题是!a否定了该对象的真值,而不是存储在单元格中的值。因此,无论实际值存储在该单元格中的是什么,这将始终返回false(除非a为空)。

您需要使用相应的getValue / setValue方法从单元格中获取实际值:

function changeState() {
   var a = SpreadsheetApp.getActiveSheet().getRange('D38'); 
   var value = a.getValue();
   value = !value;
   a.setValue(value);
};

或更简单:

function changeState() {
   var a = SpreadsheetApp.getActiveSheet().getRange('D38'); 
   a.setValue(!a.getValue());
};