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}条已完成条目`); }
使用说明
- 打开表格后点击「扩展程序」→「Apps Script」,删除原有
onEdit代码,粘贴上述代码后保存项目。 - 首次运行需要按照页面提示完成脚本授权,无安全风险。
- 回到表格界面,插入作为按钮的图片,右键点击图片选择「指定脚本」,输入函数名
moveCompletedRows后确认即可,点击图片即可触发批量移动。
注意事项
- 若需要同时移动单元格格式、注释等内容,可将
setValues逻辑替换为copyTo方法,普通数据移动需求上述代码可直接使用。 - 如果Work表第一行不是表头,将遍历语句的初始值
i = 1改为i = 0即可。
内容的提问来源于stack exchange,提问作者Jason O'Neill
相关产品推荐
相关产品推荐

