请求实现:D列标记‘done’删行及手动删除菜单功能
搞定你的幼儿园待办清单:自动+手动删除已完成行的Google Sheets脚本
嘿,我懂你现在的烦恼——打理幼儿园已经够忙了,还要跟工作表脚本较劲实在闹心。下面给你一套简单好用的方案,既能自动删除标记为"done"的行,还能加个手动菜单按需批量删除,全程不用你懂复杂技术,跟着步骤来就行:
一、完整脚本代码
打开你的Google Sheet,点击顶部菜单栏的「扩展程序」→「Apps Script」,把编辑器里默认的代码全删掉,粘贴下面这段代码:
// 打开表格时自动创建自定义菜单 function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('待办工具') .addItem('删除所有已完成行', 'deleteDoneRows') .addToUi(); } // 编辑单元格时自动删除已完成行 function onEdit(e) { const sheet = e.source.getActiveSheet(); const editedCell = e.range; // 只处理D列(第4列,索引从0开始是3)的编辑操作 if (editedCell.getColumn() === 3) { const cellValue = editedCell.getValue().toString().trim(); // 判断是否标记为"done"(严格匹配小写,需要改大小写可调整这里) if (cellValue === 'done') { sheet.deleteRow(editedCell.getRow()); } } } // 手动批量删除所有已完成行 function deleteDoneRows() { const sheet = SpreadsheetApp.getActiveSheet(); const data = sheet.getDataRange().getValues(); const rowsToDelete = []; // 从下往上遍历(避免删除行后索引混乱) for (let i = data.length - 1; i >= 0; i--) { const cellValue = data[i][3]?.toString().trim(); // D列对应索引3 if (cellValue === 'done') { rowsToDelete.push(i + 1); // 表格行号从1开始,所以加1 } } // 批量删除目标行 rowsToDelete.forEach(row => sheet.deleteRow(row)); // 弹出提示告知操作结果 SpreadsheetApp.getUi().alert(`已删除${rowsToDelete.length}条已完成的待办行`); }
二、安装和使用步骤
保存并授权脚本:
- 粘贴代码后,点击编辑器顶部的「保存」按钮,给项目起个好记的名字(比如"幼儿园待办助手")。
- 第一次运行时(比如点击编辑器的运行按钮选择
onOpen),会弹出权限请求,跟着提示点击「允许」即可——这是脚本需要修改表格内容的正常权限,完全安全。
自动删除功能:
- 回到工作表,在D列任意行输入
done(小写,要是你习惯用大写,可以把代码里的'done'改成'DONE',或者改成cellValue.toLowerCase() === 'done'来忽略大小写),回车后该行会自动消失,完美适配你的需求!
- 回到工作表,在D列任意行输入
手动删除菜单:
- 刷新工作表后,顶部菜单栏会多出一个「待办工具」选项,点击它选择「删除所有已完成行」,就能一次性清空所有D列标记为
done的行,还会弹出提示告诉你删除了多少行,省心又直观。
- 刷新工作表后,顶部菜单栏会多出一个「待办工具」选项,点击它选择「删除所有已完成行」,就能一次性清空所有D列标记为
三、可选小调整
- 如果你的待办清单在特定工作表(比如不是第一个工作表),可以把代码里的
const sheet = SpreadsheetApp.getActiveSheet();改成const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的工作表名称");,把引号里的内容替换成你实际的工作表名就行。 - 建议先给表格做个备份再测试脚本,避免误操作哦~
内容的提问来源于stack exchange,提问作者Joseph Lawrence
相关产品推荐
相关产品推荐

