You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:13:14