You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:03