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

求助:将Google Sheets中状态为Complete的行移至另一工作表的脚本

Google Sheets 自动移动「Complete」状态行到「Completed」工作表脚本

正确脚本

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('自定义操作')
      .addItem('移动已完成行', 'moveCompletedRows')
      .addToUi();
}

function moveCompletedRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('Main');
  const targetSheet = ss.getSheetByName('Completed');
  
  // 获取源表所有数据(含表头)
  const data = sourceSheet.getDataRange().getValues();
  const header = data[0];
  const rowsToKeep = [];
  const rowsToMove = [];
  
  // 遍历数据行(跳过表头)
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    // 状态列对应H列(数组索引7,从0开始计数)
    if (row[7] === 'Complete') {
      rowsToMove.push(row);
    } else {
      rowsToKeep.push(row);
    }
  }
  
  // 写入待移动的行到目标表
  if (rowsToMove.length > 0) {
    const targetStartRow = targetSheet.getLastRow() === 0 ? 1 : targetSheet.getLastRow() + 1;
    targetSheet.getRange(targetStartRow, 1, rowsToMove.length, header.length).setValues(rowsToMove);
  }
  
  // 重置源表:保留表头,写入剩余行
  sourceSheet.clearContents();
  sourceSheet.getRange(1, 1, 1, header.length).setValues([header]);
  if (rowsToKeep.length > 0) {
    sourceSheet.getRange(2, 1, rowsToKeep.length, header.length).setValues(rowsToKeep);
  }
}

脚本说明与修改点

  • 工作表匹配:替换了原脚本的Current/OLD为你需要的Main/Completed
  • 状态匹配:将状态判断值从DONE改为Complete
  • 批量处理优化:避免逐行移动删除导致的行号错乱问题,一次性筛选并处理所有行,效率更高
  • 表头保护:跳过第一行表头,确保不会误移动表头
  • 中文菜单:自定义菜单改为中文,操作更直观

使用步骤

  1. 打开目标Google Sheets表格
  2. 点击顶部菜单栏「扩展程序」→「Apps 脚本」
  3. 删除默认代码,粘贴上述脚本
  4. 点击保存,给项目命名(如「移动已完成行」)
  5. 刷新表格,顶部会出现「自定义操作」菜单
  6. 点击「自定义操作」→「移动已完成行」,首次运行需完成授权(按提示操作即可)

原脚本问题分析

  • 工作表名、状态值与你的需求不匹配,导致逻辑无效
  • 逐行删除行的方式会引发后续行号偏移,可能造成错误删除
  • 未区分表头和数据行,存在误移动表头的风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:15:32