编写Google Apps Script:删除勾选行及对应名称工作表
批量删除勾选行及对应工作表的Google Apps Script实现
以下是修改后的完整脚本,实现删除复选框勾选的行,同时删除名称匹配对应单元格值的工作表:
function deleteOldData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const ws = ss.getSheetByName("INCOMING"); const ui = SpreadsheetApp.getUi(); // 获取复选框所在列(H列)和对应工作表名称的列(示例用A列,根据实际情况修改列范围) const dataRange = ws.getRange(1, 1, ws.getLastRow(), 8); // 覆盖A到H列 const data = dataRange.getValues(); const buttonPressed = ui.alert("WARNING: The following action is unrecoverable would you still like to execute?", ui.ButtonSet.YES_NO); if (buttonPressed == ui.Button.YES) { // 从下往上遍历,避免删除行导致索引错乱 for (let i = data.length - 1; i >= 0; i--) { const isChecked = data[i][7]; // H列对应索引7 if (isChecked === true) { const sheetName = data[i][0]; // 示例取A列值作为工作表名,根据实际列修改索引 if (sheetName) { try { const targetSheet = ss.getSheetByName(sheetName); if (targetSheet) { // 防止删除最后一个工作表导致报错 if (ss.getSheets().length > 1) { ss.deleteSheet(targetSheet); console.log(`已删除工作表:${sheetName}`); } else { ui.alert(`无法删除最后一个工作表:${sheetName}`); } } else { console.log(`未找到目标工作表:${sheetName}`); } } catch (e) { ui.alert(`删除工作表${sheetName}时出错:${e.message}`); } } // 删除当前勾选的行 ws.deleteRow(i + 1); } } ui.alert("操作完成"); } }
关键修改说明:
- 批量获取数据:一次性读取包含复选框列和工作表名称列的范围,减少API调用次数,提升脚本效率
- 工作表名称匹配:根据你存储工作表名称的列修改索引(列从左到右从0开始计数,比如B列对应索引1)
- 容错处理:删除前检查目标工作表是否存在,同时防止删除最后一个工作表导致表格异常
- 异常捕获:用try-catch处理删除时的权限、保护等异常情况
使用注意:
- 替换代码中
data[i][0]的索引为你实际存储工作表名称的列索引 - 操作前务必备份表格,避免数据丢失
- 工作表名称区分大小写,需确保和创建时的名称完全一致
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

