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

Google Apps Script发送Sheet行数据邮件异常问题求助

Google Apps Script 邮件发送问题修复方案

问题症状

  • 邮件主题显示NaN
  • 邮件正文显示[object Object]
  • 收到的邮件数量远多于实际数据行数

错误原因及修复点

1. 循环条件错误导致无限循环

原代码中for (var i=1;i=lastline;i++)是赋值操作(而非判断条件),会导致循环无限执行直到脚本超时,因此产生大量重复邮件。
修复:改为判断条件i <= lastline,同时注意Google Sheets数据数组为0索引,循环时需对应调整行索引。

2. 数据获取方式错误

原代码中data是Range对象,并非二维数组,无法通过data[i,1]直接取值(这是VBA的写法),导致变量获取不到有效数据,主题拼接时出现NaN。
修复:调用getValues()将Range转换为二维数组,数组行/列索引从0开始,因此第i行(循环从1开始)对应数组的i-1索引。

3. 邮件发送参数顺序错误

GmailApp.sendEmail的参数顺序为:收件人、主题、纯文本正文、选项对象。原代码将选项对象放在第三个参数位置,导致纯文本正文被传入对象,显示[object Object]。
修复:补充空字符串作为纯文本正文,将选项对象放在第四个参数位置。

4. 收件人格式优化

原代码中adressee是数组,单个邮箱时直接使用字符串更简洁,避免潜在格式问题。

修复后的完整代码

Google Apps Script 代码

// 访问Google表格
var wb = SpreadsheetApp.getActiveSpreadsheet();
var sheet = wb.getSheetByName("automail");

// 获取所有数据并转换为二维数组
var data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
var lastline = sheet.getLastRow();

// 遍历数据行(从第1行开始,对应数组索引i-1)
for (var i = 1; i <= lastline; i++) {
  // 从二维数组中获取当前行数据
  var rowData = data[i - 1];
  var takidatum = rowData[0];
  var sorrend = rowData[1];
  var takarito = rowData[2];
  var lakaskod = rowData[3];
  var vendegszam = rowData[4];
  var befejezes = rowData[5];
  var erkezes = rowData[6];
  var munkajellege = rowData[7];
  var komment = rowData[8];
  var cim = rowData[9];
  var emeletajto = rowData[10];
  var kapukod = rowData[11];
  var kulcsdoboz = rowData[12];

  // 收件人邮箱
  var adressee = 'xy@gmail.com';

  // 创建HTML模板对象
  var htmlTemplate = HtmlService.createTemplateFromFile('email.html');

  // 为模板赋值
  htmlTemplate.takidatum = takidatum;
  htmlTemplate.sorrend = sorrend;
  htmlTemplate.takarito = takarito;
  htmlTemplate.lakaskod = lakaskod;
  htmlTemplate.vendegszam = vendegszam;
  htmlTemplate.befejezes = befejezes;
  htmlTemplate.erkezes = erkezes;
  htmlTemplate.munkajellege = munkajellege;
  htmlTemplate.komment = komment;
  htmlTemplate.cim = cim;
  htmlTemplate.emeletajto = emeletajto;
  htmlTemplate.kapukod = kapukod;
  htmlTemplate.kulcsdoboz = kulcsdoboz;

  // 生成邮件HTML内容
  var htmlforemail = htmlTemplate.evaluate().getContent();

  // 发送邮件:参数顺序为收件人、主题、纯文本正文、选项
  GmailApp.sendEmail(
    adressee,
    `${takidatum} ${lakaskod} ${takarito}`,
    '', // 纯文本正文留空,使用HTML正文
    { htmlBody: htmlforemail }
  );
}

HTML模板(email.html)

<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <UL>
      <li>Dátum : <?= takidatum ?></li>
      <li>Lakáskód : <?= lakaskod ?></li>
      <li>Takaritó : <?= takarito ?></li>
      <li>Munka jellege : <?= munkajellege ?></li>
      <li>sorrend : <?= sorrend ?></li>
      <li>Érkező vendégek száma : <?= vendegszam ?></li>
      <li>Mikorra kell befejezni? : <?= befejezes ?></li>
      <li>Mikor kezdhető a takarítás? : <?= erkezes ?></li>
      <li>Komment : <?= komment ?></li>
      <li>Cím : <?= cim ?></li>
      <li>Emelet/ajtó infó : <?= emeletajto ?></li>
      <li>Kapukód : <?= kapukod ?></li>
      <li>Kulcsdoboz kód : <?= kulcsdoboz ?></li>
    </UL>
  </body>
</html>

内容的提问来源于stack exchange,提问作者Peter Vidra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:12:14