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
相关产品推荐
相关产品推荐

