如果满足条件,则将单元格的列增加1

时间:2019-08-01 08:42:35

标签: google-apps-script google-sheets

我正在尝试创建一个宏,该宏会将工作表的C:5列更改为C:bottom。

如果左侧的单元格(末尾为B:5)等于字符串“ TRUE”,则这些单元格应增加1。

这是我到目前为止所拥有的,但条件尚未得到满足。我也不知道将其应用于整个专栏的最佳方法。我应该做一个for循环吗?

这是我到目前为止所拥有的

var arr = state.locals;
arr.push(action.payload);

1 个答案:

答案 0 :(得分:3)

问题:

您的if语句条件未得到满足。这是因为getValue()返回值及其关联的类型。您的“ TRUE”值将被识别为布尔值,而不是if语句所寻找的字符串。您正在使用toString(),但这会将值更改为'true'而不是'TRUE',因此您的if语句条件仍然不满足。


解决方案:

有几种解决方法:

  1. 更改您的if语句以查找布尔值:

    if (reocurring === true)
    
  2. 将值强制设置为字符串和大写以确保满足您的条件:

    var reocurring = spreadsheet.getRange("B5").getValue().toString().toUpperCase();
    
  3. 使用getDisplayValue()从头开始返回一个字符串:

    var reocurring = spreadsheet.getRange("B5").getDisplayValue();
    

浏览表格:

由于如果要为大型数据集运行脚本,这可能是一个运行时间很长的脚本,所以最好在此处使用数组。我已尝试对代码进行注释,以便于理解,但如果您有任何疑问,请告诉我。

function increment() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();

  //get array values in columns B and C starting from row 5
  var array = spreadsheet.getRange(5, 2, spreadsheet.getLastRow(), 2).getValues();

  //loop through array
  for (i = 0; i < array.length; i++) {
    if (array[i][0] === true) {
      //increment value in row C by 1
      array[i][1] = array[i][1] + 1;
    }
  }
  //set new incremented values
  spreadsheet.getRange(5, 2, array.length, array[0].length).setValues(array);
}

参考文献: