Google Sheets邮件脚本优化:文件缺失时跳过并标记问题
解决Google Sheets邮件脚本文件缺失停止运行的问题
原脚本在Google Drive指定文件夹找不到目标文件时会停止运行,需修改为标记“文件未找到”并继续批量发送邮件,以下是修改后的完整脚本:
1. 邮件发送主脚本(修改版)
function sendEmails() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName('Gas'); var sheet2 = ss.getSheetByName('Email Gas'); var subject = sheet2.getRange(2,1).getValue(); var n = sheet1.getLastRow(); var folderID = displayPrompt("Enter folder ID:"); for (var i = 2; i < n+1 ; i++ ) { var emailAddress = sheet1.getRange(i,3).getValue(); var date = sheet2.getRange(6,5).getValue(); var message = sheet2.getRange(2,2).getValue(); var documentName = '.xlsx'; var name = sheet1.getRange(i,2).getValue(); var finalfile = getFileFromFolder(folderID, name, documentName); message = message.replace("<Date>", date); let status; if (!finalfile) { status = "文件未找到"; } else { try { MailApp.sendEmail(emailAddress, subject, message, {attachments: [finalfile.getAs(MimeType.MICROSOFT_EXCEL)]}); status = "Sent"; } catch(err) { status = "Failed"; } } sheet1.getRange(i,4).setValue(status); } }
修改点:
- 新增对
finalfile的存在性判断,若返回null则直接标记“文件未找到” - 简化状态变量逻辑,用
setValue替代setValues(单值无需二维数组) - 变量名
Date改为小写date,避免与内置对象冲突
2. 输入folderID的提示脚本(无修改)
function displayPrompt(question) { var ui = SpreadsheetApp.getUi(); var result = ui.prompt(question); return result.getResponseText(); }
3. 获取附件的脚本(修改版)
function getFileFromFolder(folderID, filename, docType) { var folder = DriveApp.getFolderById(folderID); var files = folder.getFilesByName(filename + docType); if (files.hasNext()) { return files.next(); } else { return null; } }
修改点:
- 补全函数声明(原代码缺失函数定义头部)
- 未找到文件时返回
null,而非尝试返回未定义的file变量 - 移除无用的
ss变量声明和error数组操作,简化逻辑
核心逻辑说明
- 获取文件的函数在未找到目标文件时返回
null,避免抛出错误中断脚本 - 主脚本循环中先检查文件是否存在:
- 若不存在,直接在表格第4列标记“文件未找到”
- 若存在,执行邮件发送逻辑,根据结果标记“Sent”或“Failed”
- 所有情况都不会中断循环,确保批量发送完成后统一排查缺失文件
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

