Google Apps Script开发需求:实现基于第8列已勾选复选框的行数判断逻辑
Google Apps Script开发需求:实现基于第8列已勾选复选框的行数判断逻辑
嗨,我来帮你搞定这个需求!你要实现的核心是找到第8列里最后一个被勾选的复选框所在行,然后计算当前新增行和它之间的行数差,当这个差值大于等于6时,就勾选当前行的第8和10列复选框对吧?
我先给你拆解一下实现步骤,再把完整代码给你:
第一步:写个辅助函数找第8列最后一个勾选的行号
我们需要从第8列的最后一行往上遍历,找到第一个值为true的行(因为复选框勾选后对应单元格的值是布尔值true)。如果整个第8列都没有勾选的,那我们就默认从第0行开始算,确保首次新增行满足条件时也能触发逻辑。
第二步:把逻辑整合到你的addRow函数里
在你需要的那个if判断前,调用这个辅助函数,计算当前新增行和目标行的行数差,再判断是否满足条件。
下面是修改后的完整代码:
function addRow() { //Initialize variables var ss = SpreadsheetApp.getActiveSpreadsheet(); var dataSheet = ss.getSheetByName("sheet1"); var lastRow = dataSheet.getLastRow() + 1; var newData = (new Date()); dataSheet.getRange(lastRow, 1, 1, 1).setValue(new Date()); dataSheet.getRange(lastRow, 2, 1, 11).insertCheckboxes(); dataSheet.getRange(lastRow,2,1,6).check(); // this works fine if(new Date().getDate() == 23){ dataSheet.getRange(lastRow,7,1,1).check(); dataSheet.getRange(lastRow,9,1,1).check(); dataSheet.getRange(lastRow,11,1,1).check(); dataSheet.getRange(lastRow,12,1,1).check(); } // 新增逻辑:获取第8列最后一个勾选的行号 function getLastCheckedRowInColumn8() { var col8Range = dataSheet.getRange(1, 8, dataSheet.getLastRow(), 1); var col8Values = col8Range.getValues(); // 从最后一行往上遍历,效率更高 for (var i = col8Values.length - 1; i >= 0; i--) { if (col8Values[i][0] === true) { // 数组索引从0开始,所以要+1得到实际行号 return i + 1; } } // 如果没有找到任何勾选的,返回0,确保首次新增行也能计算差值 return 0; } var lastCheckedRow = getLastCheckedRowInColumn8(); var rowsSinceLastChecked = lastRow - lastCheckedRow; // 判断是否达到6行间隔(包含第6行) if(rowsSinceLastChecked >= 6){ dataSheet.getRange(lastRow,8,1,1).check(); dataSheet.getRange(lastRow,10,1,1).check(); } }
代码说明:
getLastCheckedRowInColumn8函数:专门用来定位第8列最后一个勾选的行,从下往上遍历不用检查所有行,效率更高。rowsSinceLastChecked:计算当前新增行和最后一个勾选行的差值,比如最后一个勾选行是第10行,当前新增行是第16行,差值就是6,刚好满足条件触发勾选。- 如果第8列之前没有任何勾选的复选框,
lastCheckedRow会返回0,此时rowsSinceLastChecked就是当前的lastRow,只要lastRow>=6就会触发勾选逻辑,完全适配你的场景。
这样修改后,你的脚本就能实现每6个未勾选第8列的行后,自动勾选当前行的第8和10列啦!
备注:内容来源于stack exchange,提问作者user21688817
相关产品推荐
相关产品推荐

