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

Google Apps Script改造:实现Google Sheets批量移动标记Completed的行到指定工作表

跨工作表批量移动已完成行实现方案

实现代码

function moveCompletedRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const workSheet = ss.getSheetByName("Work");
  const completedSheet = ss.getSheetByName("completed");
  // 读取Work表全量数据
  const workData = workSheet.getDataRange().getValues();
  const completedRows = [];
  const deleteRowNumbers = [];
  const checkColumn = 17; // 检测列为第17列(Q列)

  // 遍历行筛选符合条件的条目,默认跳过第一行表头,无表头可将i初始值改为0
  for (let i = 1; i < workData.length; i++) {
    const currentRow = workData[i];
    // 数组索引从0开始,因此列号减1取对应值
    if (currentRow[checkColumn - 1] === "Completed") {
      completedRows.push(currentRow);
      deleteRowNumbers.push(i + 1); // 工作表行号从1开始,索引+1对应实际行号
    }
  }

  // 无符合条件的行直接退出
  if (completedRows.length === 0) {
    ss.toast("未找到已完成条目");
    return;
  }

  // 批量插入到completed表第2行(表头下方)
  completedSheet.insertRowsBefore(2, completedRows.length);
  completedSheet.getRange(2, 1, completedRows.length, completedRows[0].length).setValues(completedRows);

  // 倒序删除原表行,避免删除前序行导致后续行号偏移
  for (let i = deleteRowNumbers.length - 1; i >= 0; i--) {
    workSheet.deleteRow(deleteRowNumbers[i]);
  }

  ss.toast(`已成功移动${completedRows.length}条已完成条目`);
}

使用说明

  1. 打开表格后点击「扩展程序」→「Apps Script」,删除原有onEdit代码,粘贴上述代码后保存项目。
  2. 首次运行需要按照页面提示完成脚本授权,无安全风险。
  3. 回到表格界面,插入作为按钮的图片,右键点击图片选择「指定脚本」,输入函数名moveCompletedRows后确认即可,点击图片即可触发批量移动。

注意事项

  • 若需要同时移动单元格格式、注释等内容,可将setValues逻辑替换为copyTo方法,普通数据移动需求上述代码可直接使用。
  • 如果Work表第一行不是表头,将遍历语句的初始值i = 1改为i = 0即可。

内容的提问来源于stack exchange,提问作者Jason O'Neill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:05