添加确认弹窗后Google Sheets脚本执行异常求助
问题原因与修复方案
核心错误1:未定义lastRow变量
你在判断if (lastRow > 1)时,lastRow从未被声明和赋值,执行到这里会直接抛出ReferenceError,导致脚本异常中断,无法正常结束,所以会一直显示“处理中”。
核心错误2:函数代码未闭合
你的DeleteOldTransactionsNew函数最后缺少一个闭合的大括号},导致语法不完整,脚本无法正确解析执行流程。
额外优化点
- 原脚本中
clear方法使用了带参数的配置(仅清除内容、跳过过滤行),新脚本改成了clearContent(),建议保持原逻辑以保证功能一致。 - 弹窗提示可以简化,避免过多弹窗干扰用户。
修复后的完整脚本
function DeleteOldTransactionsNew() { var ui = SpreadsheetApp.getUi(); // 显示确认弹窗 var response = ui.alert( '确认删除数据', '即将清除当前工作表的旧数据,是否继续?', ui.ButtonSet.OK_CANCEL ); // 处理用户响应 if (response == ui.Button.OK) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 检查当前工作表是否为指定表 if (sheet.getName() !== "BankDataUpload") { ui.alert("错误", "此脚本仅能在'BankDataUpload'工作表运行", ui.ButtonSet.OK); return; } // 定义lastRow变量,获取数据区域的最后一行 var lastRow = sheet.getLastRow(); if (lastRow > 1) { // 保留原逻辑的清除配置:仅清除内容、跳过过滤行 sheet.getRange(2, 2, lastRow - 1, 7).clear({contentsOnly: true, skipFilteredRows: true}); } ui.alert('旧数据已清除完成'); } else if (response == ui.Button.CANCEL) { ui.alert('操作已取消'); } else if (response == ui.Button.CLOSE) { ui.alert('弹窗已关闭,未执行任何操作'); } } // 补上缺失的闭合大括号
修复说明
- 新增
var lastRow = sheet.getLastRow();,正确获取工作表的最后数据行 - 补上函数末尾缺失的
},修正语法错误 - 还原了原脚本的
clear配置参数,保持功能一致性 - 调整了提示文本,更简洁清晰
内容的提问来源于stack exchange,提问作者Tom Albu
相关产品推荐
相关产品推荐

