如何将Google Sheets中符合条件的产品告警合并到单个消息框?
修改方案:合并告警到单个消息框
没问题,我帮你调整代码,把所有符合条件的告警信息合并到一个消息框里。核心思路是先收集所有告警内容,最后一次性弹出,以下是完整的修改方案:
完整修改后的代码
function alarm(findArray) { var findArray = findArray || ["YES"]; // 默认查找关键词为"YES" var ss = SpreadsheetApp.getActive(); var sh = ss.getSheetByName('CALENDAR'); var CALENDARsheet = ss.getSheetByName('CALENDAR'); // 初始化数组,用来收集所有告警消息 var alertMessages = []; var srg = sh.getRange(2, 8, sh.getLastRow() - 1, 1); for (var i = 0; i < findArray.length; i++) { var f = srg.createTextFinder(String(findArray[i])).matchCase(true).findAll(); if (f.length > 0) { for (var j = 0; j < f.length; j++) { var rowNum = f[j].getRow(); // 获取产品名称和剩余天数,组装告警文本 var productName = CALENDARsheet.getRange(rowNum, 1).getValue(); var daysLeft = CALENDARsheet.getRange(rowNum, 7).getValue(); var message = `${productName} product has ${daysLeft} days to go on sale.`; // 将消息存入数组,暂不弹窗 alertMessages.push(message); } } } // 所有消息收集完成后,统一弹出单个消息框 if (alertMessages.length > 0) { var combinedMessage = alertMessages.join('\n'); Browser.msgBox('ALERT ALERT', combinedMessage, Browser.Buttons.OK); } }
关键改动说明
- 新增消息收集容器:创建
alertMessages数组,把所有符合条件的告警文本先存起来,而不是找到一条就弹一次窗。 - 替换弹窗逻辑:把原循环内的
Browser.msgBox调用改成向数组添加内容,避免多次弹窗的困扰。 - 统一合并弹窗:遍历结束后,用
join('\n')把数组里的所有消息用换行符连接,最后只弹出一个包含所有告警的消息框。 - 简化行号计算:因为原代码里的删除行逻辑是注释状态,所以去掉了多余的
d变量,直接用f[j].getRow()获取行号,让代码更简洁。
这样修改后,所有符合条件的产品告警会整齐地显示在同一个消息框里,每条消息单独占一行,完全符合你想要的效果。
内容的提问来源于stack exchange,提问作者Rheago
相关产品推荐
相关产品推荐

