Google Apps Script无法实现发邮件后同步Sheet1数据到Sheet2求助
代码问题排查
- 冗余嵌套:
myFunction内部嵌套了sendEmails函数但没有执行调用,直接运行脚本不会触发任何逻辑 - 循环语法错误:第二个遍历
data的for循环写法for (var i in data, i++)不符合JS语法规范,会直接报错 - 写入逻辑错误:写入Test表时调用
setValue传入一维数组无法正常写入整行数据,且写入位置逻辑错误,没有自动定位到Test表的末尾空行实现追加效果 - 重复遍历冗余:不需要拆分发邮件和写入数据为两个独立循环,发完邮件直接写入对应行数据即可,逻辑更顺畅
修正后可用代码
function sendEmails() { // 读取源表数据 const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Messages from BOs"); const startRow = 4; // 起始处理行,和原有配置一致 const numRows = 1; // 单次处理行数,需要处理多行可修改这个值 const dataRange = sourceSheet.getRange(startRow, 1, numRows, 3); const data = dataRange.getValues(); // 获取目标Test表 const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test'); for (let i = 0; i < data.length; i++) { const row = data[i]; const emailAddress = row[0]; const subject = row[1]; const message = row[2]; // 发送邮件 MailApp.sendEmail(emailAddress, subject, message); // 直接追加到Test表末尾新行 targetSheet.appendRow(row); } }
补充说明
如果需要单次处理更多行,直接修改numRows的数值即可;如果需要避免重复发送邮件,可以在源表加一列发送状态标识,发送成功后标记为已发送,下次遍历跳过已标记的行即可。
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

