我正在为 Gmail/Google Sheets 开发一个合并邮件应用程序。它应该从电子表格中检索动态数据,但尽管电子邮件发送正确,但所有电子邮件都只返回第一行的数据。
我多次尝试更改从电子表格中检索信息的方式,但同样的问题不断发生。
// Defina o ID da planilha
var SHEET_ID = 'spreadsheet_id';
// Defina o número máximo de destinatários por dia
var MAX_RECIPIENTS_PER_DAY = 10;
// Armazenamento em cache da planilha
var cachedSheet = null;
function getSheet() {
if (!cachedSheet) {
cachedSheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('Página1');
}
return cachedSheet;
}
function sendEmails() {
var sheet = getSheet();
var lastRow = sheet.getLastRow();
var recipientsToday = 0;
// Verifica se a planilha tem dados
if (lastRow < 2) {
return;
}
for (var i = 2; i <= lastRow; i++) {
var currentDate = new Date();
var rowData = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues()[0];
var market = rowData[1];
var company = rowData[2];
var name = rowData[3];
var role = rowData[4];
var email = rowData[5];
var status = rowData[7];
// Verifica se o e-mail já foi enviado
if (status !== 'Email Enviado' && recipientsToday < MAX_RECIPIENTS_PER_DAY && email !== "") {
// Envia o e-mail
var emailTemplate = getEmailTemplate(name, company, market, role);
GmailApp.sendEmail(email, emailTemplate.subject, emailTemplate.body);
// Atualiza a planilha
sheet.getRange(i, 7).setValue(currentDate);
sheet.getRange(i, 8).setValue('Email Enviado');
// Acompanha o número de destinatários
recipientsToday++;
}
}
}
function checkReplies() {
var sheet = getSheet();
var lastRow = sheet.getLastRow();
// Verifica se a planilha tem dados
if (lastRow < 2) {
return;
}
for (var i = 2; i <= lastRow; i++) {
var rowData = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues()[0];
var email = rowData[5];
var thread = GmailApp.search('to:' + email);
for (var j = 0; j < thread.length; j++) {
var messages = thread[j].getMessages();
for (var k = 0; k < messages.length; k++) {
if (messages[k].isInInbox() && !messages[k].isDraft() && !messages[k].isInTrash()) {
sheet.getRange(i, 8).setValue('Resposta Recebida');
break; // Evita interromper o loop
}
}
}
}
}
function removeRecipient(email) {
var sheet = getSheet();
var lastRow = sheet.getLastRow();
// Verifica se a planilha tem dados
if (lastRow < 2) {
return;
}
for (var i = 2; i <= lastRow; i++) {
var rowData = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues()[0];
if (rowData[5] === email) {
sheet.deleteRow(i);
break; // Evita interromper o loop
}
}
}
// Função para obter o modelo de e-mail do Gmail
function getEmailTemplate(name, company, market, role) {
try {
var threads = GmailApp.search('subject:Teste de Implantação');
if (threads.length > 0) {
var messages = threads[0].getMessages();
var emailSubject = messages[messages.length - 1].getSubject();
var emailBody = messages[messages.length - 1].getPlainBody();
// Substitui os campos dinâmicos pelos valores da planilha
emailSubject = emailSubject.replace('{{nome}}', name).replace('{{empresa}}', company).replace('{{setor}}', market).replace('{{cargo}}', role);
emailBody = emailBody.replace('{{nome}}', name).replace('{{empresa}}', company).replace('{{setor}}', market).replace('{{cargo}}', role);
return { subject: emailSubject, body: emailBody };
} else {
throw new Error("Modelo de e-mail não encontrado!");
}
} catch (error) {
Logger.log("Erro ao obter o modelo de e-mail: " + error);
return { subject: "Modelo de e-mail não encontrado", body: "Erro ao obter o modelo de e-mail." };
}
}
您在脚本中指定仅应返回 1 行,通过设置
numRows=1
:
var rowData =sheet.getRange(i, 1, 1,sheet.getLastColumn()).getValues()[0]
参见:
类表方法
>
getRange(行,列,行数,列数)