无法获取动态数据,仅返回第一行数据

问题描述 投票:0回答:1

我正在为 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." };
  }
}

google-apps-script
1个回答
0
投票

您在脚本中指定仅应返回 1 行,通过设置

numRows=1
:

var rowData =sheet.getRange(i, 1, 1,sheet.getLastColumn()).getValues()[0]

参见:
类表方法
            > getRange(行,列,行数,列数)

© www.soinside.com 2019 - 2024. All rights reserved.