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

Google Sheets脚本需求:勾选复选框后复制行至另一工作表并重置

修复Google Sheets脚本:将勾选行追加到Sheet2末尾

原脚本的核心问题是没有正确定位Sheet2的最后空白行,而是直接写入与Sheet1对应的行索引。下面是修改后的完整脚本,解决了这个问题,同时优化了操作效率:

function copyCheckedRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet1 = ss.getSheetByName("Sheet1");
  const sheet2 = ss.getSheetByName("Sheet2");
  
  // 读取Sheet1的所有数据和复选框状态(假设复选框在A列)
  const dataRange = sheet1.getDataRange();
  const allValues = dataRange.getValues();
  const checkboxStates = allValues.map(row => row[0]);
  
  const rowsToCopy = [];
  const rowsToProcess = [];
  
  // 遍历行(跳过表头的第1行)
  for (let i = 1; i < allValues.length; i++) {
    if (checkboxStates[i] === true) {
      rowsToCopy.push(allValues[i]);
      rowsToProcess.push(i + 1); // 记录实际行号(索引+1)
    }
  }
  
  // 没有勾选行就直接结束
  if (rowsToCopy.length === 0) return;
  
  // 定位Sheet2的最后空白行,批量写入数据
  const targetStartRow = sheet2.getLastRow() + 1;
  sheet2.getRange(targetStartRow, 1, rowsToCopy.length, rowsToCopy[0].length).setValues(rowsToCopy);
  
  // 批量清除Sheet1对应行内容并重置复选框
  rowsToProcess.forEach(rowNum => {
    sheet1.getRange(rowNum, 1, 1, sheet1.getLastColumn()).clearContent();
    sheet1.getRange(rowNum, 1).setValue(false);
  });
}

关键修改点

  • 目标行定位:用sheet2.getLastRow() + 1精准获取Sheet2的下一个空白行,确保数据始终追加到末尾,不会覆盖原有内容
  • 批量操作:先收集所有要复制和清除的行,再一次性执行写入和清除操作,减少API调用次数,避免脚本运行超时
  • 状态重置:明确将已勾选的复选框设为false,确保Sheet1的行状态恢复初始

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:02