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

Google Sheets脚本修改:将标记done的行移至底部且排除首标签

解决方案:合并脚本实现指定标签的Done任务自动移行

以下是整合后的脚本,完美匹配你的需求:仅在非首标签的B列被标记为done时触发,将该行移至指定位置(支持两种移行逻辑,按需选择)。

function onEdit(e) {
  // 获取编辑事件的关键信息
  const range = e.range;
  const sheet = range.getSheet();
  const editedValue = e.value;
  
  // 触发条件校验:
  // 1. 不是第一个标签(排除概览页)
  // 2. 编辑的是B列(状态列)
  // 3. 编辑后的值是"done"
  // 4. 编辑的行在数据行范围内(3-20行,前2行是表头)
  if (sheet.getIndex() === 1 || range.getColumn() !== 2 || editedValue !== "done" || range.getRow() < 3 || range.getRow() > 20) {
    return; // 不满足条件则直接退出
  }

  // 选择移行逻辑:二选一即可

  // --- 逻辑1:移至第20行(待办与已完成间留空行)---
  const targetRow = 20;
  const rowToMove = range.getRow();
  // 如果要移动的行已经是第20行,无需操作
  if (rowToMove === targetRow) return;
  
  // 剪切该行并插入到第20行位置
  const rowData = sheet.getRange(rowToMove, 1, 1, 3).getValues()[0];
  sheet.getRange(rowToMove, 1, 1, 3).clearContent();
  sheet.getRange(targetRow, 1, 1, 3).setValues([rowData]);
  
  // 可选:如果需要保留单元格格式,替换上面三行为:
  // sheet.getRange(rowToMove, 1, 1, 3).cutTo(sheet.getRange(targetRow, 1));

  // --- 逻辑2:移至已填充任务的底部(空行留在标签末尾)---
  // const lastFilledRow = sheet.getLastRow();
  // // 如果要移动的行已经是最后一行,无需操作
  // if (range.getRow() === lastFilledRow) return;
  // // 剪切该行并粘贴到最后一行的下一行
  // sheet.getRange(range.getRow(), 1, 1, 3).cutTo(sheet.getRange(lastFilledRow + 1, 1));
}

关键功能说明

  • 精准触发控制:通过多重条件判断,只响应符合要求的编辑操作(排除首标签、仅B列设为done、仅数据行范围内),避免不必要的执行。
  • 两种移行逻辑:
    • 逻辑1严格将Done任务移至第20行,保持待办区(3-19行)和已完成区(20行)的分隔,完全匹配你的理想效果。
    • 逻辑2将Done任务移至当前标签已填充内容的底部,适合任务数量不固定的场景。
  • 不影响概览页:通过sheet.getIndex() === 1直接排除首标签,确保概览页的A3提取逻辑不受干扰。

使用步骤

  1. 打开你的Google Sheets表格,点击顶部菜单栏的「扩展程序」→「Apps脚本」。
  2. 删除默认的myFunction代码,粘贴上面的脚本。
  3. 选择你需要的移行逻辑(注释掉另一个逻辑的代码)。
  4. 点击保存按钮,命名项目(比如"TaskManagerScript")。
  5. 回到表格,在任意非首标签的B列标记done,测试功能是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:43:23