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

列含复选框等隐藏内容时如何用Google Apps Script获取工作表最后一行

解决方案

首先将提供的getLastRowSpecial辅助函数添加到你的脚本中,和onEdit函数放在同一层级。该函数通过判断表格第一列是否为空来识别有效数据的最后一行,不会被后续列的复选框(未勾选时值为FALSE,不属于空值)干扰,解决原生getLastRow()判断不准的问题。

之后将你原有代码中所有调用targetSh.getLastRow()的位置,替换为通过自定义函数计算得到的有效最后一行即可。

整合后的完整代码

// 自定义获取有效数据最后一行的辅助函数
function getLastRowSpecial(range){
  var rowNum = 0;
  var blank = false;
  for(var row = 0; row < range.length; row++){
    if(range[row][0] === "" && !blank){
      rowNum = row;
      blank = true;
    } else if (range[row][0] !== ""){
      blank = false;
    };
  };
  return rowNum;
};

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentSh = event.source.getActiveSheet();
  var currentCell = event.source.getActiveRange();

  if (currentSh.getName() == 'invoice_approval' && currentCell.getColumn() == 5 && currentCell.getValue()== 'Approved') {
    var row = currentCell.getRow();
    var numColumns = currentSh.getLastColumn();
    var targetSh = ss.getSheetByName('open_invoices');
    // 替换原有getLastRow()调用
    var targetRangeValues = targetSh.getRange(1, 1, targetSh.getMaxRows(), 1).getValues();
    var validLastRow = getLastRowSpecial(targetRangeValues);
    var target = targetSh.getRange(validLastRow + 1, 1);
    currentSh.getRange(row,1,1,numColumns).moveTo(target);
    currentSh.deleteRow(row);
  }
  // 当单元格值从“Approved”变更时,将行从open_invoices移回invoice_approval
  else if (currentSh.getName() == 'open_invoices' && currentCell.getColumn() == 5 && currentCell.getValue()!= 'Approved' ) {
    var row = currentCell.getRow();
    var targetSh = ss.getSheetByName('invoice_approval');
    // 替换原有getLastRow()调用
    var targetRangeValues = targetSh.getRange(1, 1, targetSh.getMaxRows(), 1).getValues();
    var validLastRow = getLastRowSpecial(targetRangeValues);
    var target = targetSh.getRange(validLastRow + 1, 1);
    currentSh.getRange(row,1,1,5).moveTo(target);
    currentSh.deleteRow(row);
  }
}

注意事项

上述代码默认以表格第一列是否为空作为有效数据的判断标准,如果你的业务场景中需要以其他列作为判断依据,只需修改getLastRowSpecial函数中的range[row][0],索引0对应第一列,若要使用第二列则改为1,第三列改为2,以此类推即可。

内容的提问来源于stack exchange,提问作者Eaimy Khaing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:48:00