我正在尝试创建一个宏,该宏会将工作表的C:5列更改为C:bottom。
如果左侧的单元格(末尾为B:5)等于字符串“ TRUE”,则这些单元格应增加1。
这是我到目前为止所拥有的,但条件尚未得到满足。我也不知道将其应用于整个专栏的最佳方法。我应该做一个for循环吗?
这是我到目前为止所拥有的
var arr = state.locals;
arr.push(action.payload);
答案 0 :(得分:3)
您的if
语句条件未得到满足。这是因为getValue()
返回值和及其关联的类型。您的“ TRUE”值将被识别为布尔值,而不是if
语句所寻找的字符串。您正在使用toString()
,但这会将值更改为'true'而不是'TRUE',因此您的if
语句条件仍然不满足。
有几种解决方法:
更改您的if
语句以查找布尔值:
if (reocurring === true)
将值强制设置为字符串和大写以确保满足您的条件:
var reocurring = spreadsheet.getRange("B5").getValue().toString().toUpperCase();
使用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);
}