이메일을 통해 올바른 행에서 값을 보내지 않는 이유는 무엇입니까?

안토니오 산토스

아래 코드는 사용자가 변경하면 항목 이름, 버전 및 현재 상태가 포함 된 하나의 이메일을 보냅니다. 제품이 06 상태를 통과 할 수 있기 때문에 각 상태에 대해 하나의 열이 있으며 해당 항목에 대한 업데이트가 포함 된 이메일이 이미 전송 된 경우 스크립트는 "Sim"으로 표시합니다.

코드는 올바른 행과 열을 표시하지만 메시지에는 대신 다른 제품에 대한 데이터가 포함됩니다.

나는 MailApp루프를 가지고 행을 반복하면서 전송을 중지하기 위해 카운터를 추가하려고 시도했지만 지금까지 성공하지 못했습니다.

var EMAIL_SENT = "Sim";
function sendEmails() {
  var file = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ArquivoItens");
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A7:s3
  var dataRange = sheet.getRange(startRow, 1, numRows, 48)
  var data = dataRange.getValues();
  var productList = [];
  var counter = 0;
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    if (rowData[18] === "Estudo" || rowData[18] === "Desenvolvimento" || rowData[18] === "Aprovação" || rowData[18] === "Ativo" || rowData[18] === "Cancelado" || rowData[14] === "Descontinuado") {
      var status = rowData[18];
      var emailEstudo = rowData[42];    
      var emailDesenvolv = rowData[43];
      var emailAprov = rowData[44];
      var emailAtivo = rowData[45];
      var emailCancelado = rowData[46];
      var emailDescont = rowData[47];
      if (emailDesenvolv != EMAIL_SENT && status === "Desenvolvimento") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 44).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();    
      } else if(emailEstudo != EMAIL_SENT && status === "Estudo") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 43).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailAprov != EMAIL_SENT && status === "Aprovação") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 45).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailAtivo != EMAIL_SENT && status === "Ativo") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 46).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailCancelado != EMAIL_SENT && status === "Cancelado") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 47).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailDescont != EMAIL_SENT && status === "Descontinuado") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 48).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }
      var produto = rowData[1];
      var versao = rowData[2];
      var lastUpdated = rowData[19];
      var lastUpdatedAsDate = Utilities.formatDate(lastUpdated, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd/MM/yyyy HH:mm") + "hs";
      var usuario = rowData[20];
      var emailTo = file.getOwner().getEmail();
      var subject = "O produto " + produto + ", versão " + versao + " " +", mudou de status.";
      var message =  "<HTML><BODY>"
      + "<P>Olá!"
      //+ "<br><br />"
      + "<P>O status do produto " + produto + ", versão " + versao + ", foi atualizado para " + "<b>" +status +"</b>" + "."
      //+ "<brr /><br />"
      + "<br>Data da última atualização:  </b>" + lastUpdatedAsDate + "<br />"
      + "<br>Usuário: </b>" + usuario + "<br />"
      + "<br /><br />"    
      //+ "<br>Clique para explorar detalhes, ou para atualizar o status: </b>" + "https://docs.google.com/spreadsheets/d/15pL_AMKVtH4dGk1U7VWMeg590MxtNe7VY4gRqm_GhrM/edit?usp=sharing" + "<br />" 
      + "<br /><br />"  
      + "</HTML></BODY>";  
    }  

  }
  MailApp.sendEmail({
          name: "P&D - PB",
          to: emailTo,
          //cc: emailCC,
          subject: subject, 
          htmlBody: message
        });
}

다음 은 데이터에 대한 링크입니다.

문제를 설명하는 인쇄물은 다음과 같습니다. 여기에 이미지 설명 입력

이 의자에서 나 외에 문제가 어디에 있는지 찾는 데 도움을 주셔서 감사합니다!

지가 노츠 카
  • 그것은 지금처럼 코드는 변수를 덮어 produto, versaomessage각 루프 반복에서 어디 if조건은 fullfilled한다
  • 귀하의 MailApp.sendEmail()요청은 한 번만 실행합니다 - 종료 후 for루프의 마지막 값message
  • 당신이 아마도 원하는 것은 정의한 후 문 sendMail()안에 배치 하는 것입니다. 그러면 조건 이 가득 찬 모든 행에 대해 이메일이 전송됩니다.ifmessageif (rowData[18] === "Estudo" || rowData[18] === "Desenvolvimento" || rowData[18] === "Aprovação" || rowData[18] === "Ativo" || rowData[18] === "Cancelado" || rowData[14] === "Descontinuado")
  • 보다 정확하게는 외부 if진술 이행의 모든 ​​사례에 대해 이메일을 보내지 않고 내부 if또는 else if사례 중 하나의 경우에만 이메일을 보내길 원하지 않는 경우 (어떤 조건이 맞는지 추정하기가 어렵습니다. 이메일을 보내려는)- sendMail()해당 if조건 안에 붙여 넣어야 합니다.
  • 현재와 ​​마찬가지로 모든 행을 message반복하고 각 반복에서 덮어 쓴 후 메일이 전송 됩니다 (외부 if조건이 가득 찬 경우).

최신 정보

status, versao및의 조합 당 하나의 이메일을 보내려 produto는 경우 새 이메일을 보내기 전에 해당 세 가지 매개 변수의 업데이트를 쿼리하는 추가 조건문을 구현할 수 있습니다.

if(rowData[1] != produto && rowData[2] != versao && rowData[18] != status ){
  ...
  MailApp.sendEmail...
}

전체 샘플 :

//Here, I don't see how this is going to avoid sending duplicates
function SendEmail() {
  var mgrcol=4;
  var file = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ArquivoItens");
  var rg=sheet.getDataRange();
  var emailTo = file.getOwner().getEmail();

  var values=rg.getValues();
  var productList=[];
  var html='';
  for(var i=1;i<values.length;i++) {
    if(productList.indexOf(values[i][0])==-1 && productList.indexOf(values[i][2])==-1) {
      //mgrA.push(vA[i][3]);
      productList.push(values[i]); // Joga toda a linha que será usada pra dar os dados para o email.
    }
  }
  var productObj={}
  for(var i=0;i<productList.length;i++) {
    for(var j=0;j<values.length;j++) {
      if(productList[i]==values[j][0] && productList[i]==values[j][2]){
        if(productObj.hasOwnProperty(productList[i])) {
          productObj[productList[i]]+=Utilities.formatString('~~~%s<br />%s<br />%s',values[j][0],values[j][2],values[j][18]);
        }else{
          productObj[productList[i]]=Utilities.formatString('%s<br />%s<br />%s',values[j][0],values[j][2],values[j][18]);
        }                                               
      } 
    }
  }
  Logger.log(productList);
  for(var i=0;i<productList.length;i++) {
    var tA=productObj[productList[i]].split('~~~'); //This is the line presenting the error.
    var s='Status atualizado<br /></br />';
    for(var j=0;j<tA.length;j++) {
      s+=tA[j].toString() + '<br />'; 
    }
    s+='<hr widht="100" />';
    GmailApp.sendEmail(productList[i], 'User Names and Emails', null, {htmlBody:s})
    html+=Utilities.formatString('Email Recipient: <strong>%s</strong><br />',productList[i]) + s;//debug 
  }
  var ui=HtmlService.createHtmlOutput(html);//debug
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Emails');//debug
}

/*This is the code I was trying to put together, but ran into difficulties when 
fetching arow of data for each product to send the email and statig Email_Sent
*/

var EMAIL_SENT = "Sim";

function sendEmails() {
  var file = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ArquivoItens");
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A7:s3
  var dataRange = sheet.getRange(startRow, 1, numRows, 48)
  var data = dataRange.getValues();
  var produto = "";
  var versao = "";
  var status = "";
  var emailTo = file.getOwner().getEmail();
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    if (rowData[18] === "Estudo" || rowData[18] === "Desenvolvimento" || rowData[18] === "Aprovação" || rowData[18] === "Ativo" || rowData[18] === "Cancelado" || rowData[14] === "Descontinuado") {
      //var updateAsDate = new Date(rowData[13]);
      //var update = Utilities.formatDate(updateAsDate, "GMT" , "dd/MM/yyyy" );
      if(rowData[1] != produto && rowData[2] != versao && rowData[18] != status ){
        produto = rowData[1];
        versao = rowData[2];
        status = rowData[18];  
        //var emailCC = file.getEditors().map(function(e){return [e.getEmail()]}).join(",");      
        var lastUpdated = rowData[19];
        var lastUpdatedAsDate = Utilities.formatDate(lastUpdated, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd/MM/yyyy HH:mm") + "hs";
        var usuario = rowData[20];
        var message =  "<HTML><BODY>"
        + "<P>Olá!"
        //+ "<br><br />"
        + "<P>O status do produto " + produto + ", versão " + versao + ", foi atualizado para " + "<b>" +status +"</b>" + "."
        //+ "<brr /><br />"
        + "<br>Data da última atualização:  </b>" + lastUpdatedAsDate + "<br />"
        + "<br>Usuário: </b>" + usuario + "<br />"
        + "<br /><br />"    
        //+ "<br>Clique para explorar detalhes, ou para atualizar o status: </b>" + "https://docs.google.com/spreadsheets/d/15pL_AMKVtH4dGk1U7VWMeg590MxtNe7VY4gRqm_GhrM/edit?usp=sharing" + "<br />" 
        + "<br /><br />"  
        + "</HTML></BODY>";
        MailApp.sendEmail({
          name: "P&D - PB",
          to: emailTo,
          //cc: emailCC,
          subject: subject, 
          htmlBody: message
        });      
      }
      var emailEstudo = rowData[42];    
      var emailDesenvolv = rowData[43];
      var emailAprov = rowData[44];
      var emailAtivo = rowData[45];
      var emailCancelado = rowData[46];
      var emailDescont = rowData[47];
      var subject = "O produto " + produto + ", versão " + versao + " " +", mudou de status.";
      Logger.log(rowData[18]);
      if (emailDesenvolv != EMAIL_SENT && rowData[18] === "Desenvolvimento") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 44).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      } else if(emailEstudo != EMAIL_SENT && rowData[18] === "Estudo") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 43).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailAprov != EMAIL_SENT && rowData[18] === "Aprovação") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 45).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailAtivo != EMAIL_SENT && rowData[18] === "Ativo") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 46).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailCancelado != EMAIL_SENT && rowData[18] === "Cancelado") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 47).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }else if(emailDescont != EMAIL_SENT && rowData[18] === "Descontinuado") {  // Prevents sending duplicates 
        sheet.getRange(startRow + i, 48).setValue(EMAIL_SENT);
        SpreadsheetApp.flush();
      }
      Logger.log(usuario);

    }
  }
  Logger.log(usuario);
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 프로그램이 프로젝트 오일러 17에 대해 올바른 답을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

분류에서Dev

내 변수가 Firestore에서 올바른 값을받지 못하는 이유는 무엇입니까?

분류에서Dev

다른 서버를 통해 SMTP 이메일을 보내는 방법은 무엇입니까?

분류에서Dev

내 editText가 Android에서 올바른 출력을 표시하지 않는 이유는 무엇입니까?

분류에서Dev

이메일을 통해 pytest 커버리지 보고서를 보내는 방법은 무엇입니까?

분류에서Dev

getServerSideProps가 구성 요소 소품에 올바른 값을 전달하지 않는 이유는 무엇입니까?

분류에서Dev

내 TextBoxFor가 통화 값을 올바르게 표시하지 않는 이유는 무엇입니까?

분류에서Dev

내 반환 값이 기본 메서드의 값을 보유하지 않는 이유는 무엇입니까?

분류에서Dev

내 AJAX 요청이 드롭 다운 메뉴에서 올바른 값을받지 못하는 이유는 무엇입니까?

분류에서Dev

group by 문이 올바른 행을 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 js 코드가 올바른 런타임 값을 반영하지 않는 이유는 무엇입니까?

분류에서Dev

내 함수가 올바른 값을 반환하지 않는 이유는 무엇입니까?

분류에서Dev

Outlook 2013에서 내 전자 메일을 보내지 않는 이유는 무엇입니까?

분류에서Dev

Apiary 콘솔이이 API Blueprint에 대해 올바른 응답을 제공하지 않는 이유는 무엇입니까?

분류에서Dev

합계에 대한 올바른 값을 얻지 못하는 이유는 무엇입니까?

분류에서Dev

이 쿼리에 대해 올바른 내부 조인을 수행하는 방법은 무엇입니까?

분류에서Dev

배열에 대해 올바른 값을 반환하지 않는 메서드입니다. 내가 무엇을 잘못하고 있지?

분류에서Dev

python / django에서 비동기 적으로 메일을 보내는 올바른 방법은 무엇입니까?

분류에서Dev

phpmyadmin이 모든 행을 내 보내지 않는 이유는 무엇입니까?

분류에서Dev

PHP json_encode가 배열로 전달 된 값에서 올바른 값을 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 서버 PrintWriter.println ()이 소켓을 통해 메시지를 보내지 못하는 이유는 무엇입니까?

분류에서Dev

내 Bash 스크립트가이 프로젝트 오일러에 대한 올바른 답을 반환하지 않는 이유는 무엇입니까?

분류에서Dev

Dart에서 HttpServer를 통해 이미지 파일을 보내는 방법은 무엇입니까?

분류에서Dev

appfuse가 이메일을 보내지 않는 이유는 무엇입니까? (SMTPSendFailedException)

분류에서Dev

올바른 순서로 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

Sling Model 주석을 통해 페이지 개체를 얻는 올바른 방법은 무엇입니까?

분류에서Dev

Ubuntu에서 올바른 화면 해상도를 얻을 수없는 이유는 무엇입니까?

분류에서Dev

파일을 스캔 할 때 scanf (c Linux vi)에서 올바른 char 값을 얻지 못하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 프로그램이 프로젝트 오일러 17에 대해 올바른 답을 인쇄하지 않는 이유는 무엇입니까?

  2. 2

    올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

  3. 3

    내 변수가 Firestore에서 올바른 값을받지 못하는 이유는 무엇입니까?

  4. 4

    다른 서버를 통해 SMTP 이메일을 보내는 방법은 무엇입니까?

  5. 5

    내 editText가 Android에서 올바른 출력을 표시하지 않는 이유는 무엇입니까?

  6. 6

    이메일을 통해 pytest 커버리지 보고서를 보내는 방법은 무엇입니까?

  7. 7

    getServerSideProps가 구성 요소 소품에 올바른 값을 전달하지 않는 이유는 무엇입니까?

  8. 8

    내 TextBoxFor가 통화 값을 올바르게 표시하지 않는 이유는 무엇입니까?

  9. 9

    내 반환 값이 기본 메서드의 값을 보유하지 않는 이유는 무엇입니까?

  10. 10

    내 AJAX 요청이 드롭 다운 메뉴에서 올바른 값을받지 못하는 이유는 무엇입니까?

  11. 11

    group by 문이 올바른 행을 반환하지 않는 이유는 무엇입니까?

  12. 12

    내 js 코드가 올바른 런타임 값을 반영하지 않는 이유는 무엇입니까?

  13. 13

    내 함수가 올바른 값을 반환하지 않는 이유는 무엇입니까?

  14. 14

    Outlook 2013에서 내 전자 메일을 보내지 않는 이유는 무엇입니까?

  15. 15

    Apiary 콘솔이이 API Blueprint에 대해 올바른 응답을 제공하지 않는 이유는 무엇입니까?

  16. 16

    합계에 대한 올바른 값을 얻지 못하는 이유는 무엇입니까?

  17. 17

    이 쿼리에 대해 올바른 내부 조인을 수행하는 방법은 무엇입니까?

  18. 18

    배열에 대해 올바른 값을 반환하지 않는 메서드입니다. 내가 무엇을 잘못하고 있지?

  19. 19

    python / django에서 비동기 적으로 메일을 보내는 올바른 방법은 무엇입니까?

  20. 20

    phpmyadmin이 모든 행을 내 보내지 않는 이유는 무엇입니까?

  21. 21

    PHP json_encode가 배열로 전달 된 값에서 올바른 값을 반환하지 않는 이유는 무엇입니까?

  22. 22

    내 서버 PrintWriter.println ()이 소켓을 통해 메시지를 보내지 못하는 이유는 무엇입니까?

  23. 23

    내 Bash 스크립트가이 프로젝트 오일러에 대한 올바른 답을 반환하지 않는 이유는 무엇입니까?

  24. 24

    Dart에서 HttpServer를 통해 이미지 파일을 보내는 방법은 무엇입니까?

  25. 25

    appfuse가 이메일을 보내지 않는 이유는 무엇입니까? (SMTPSendFailedException)

  26. 26

    올바른 순서로 인쇄되지 않는 이유는 무엇입니까?

  27. 27

    Sling Model 주석을 통해 페이지 개체를 얻는 올바른 방법은 무엇입니까?

  28. 28

    Ubuntu에서 올바른 화면 해상도를 얻을 수없는 이유는 무엇입니까?

  29. 29

    파일을 스캔 할 때 scanf (c Linux vi)에서 올바른 char 값을 얻지 못하는 이유는 무엇입니까?

뜨겁다태그

보관