2013-02-10 1 views
0

아직 로프를 배우고 있습니다 & 님이이 문제에 대해 최선의 방법을 제안 할 수 있기를 희망했습니다. (해결책을 찾지 만 ! 어떤 성공) :Google 스프레드 시트 전자 메일을 보내고 보내는 총 전자 메일 수를 계속 유지하는 스크립트

열 A : :

나는 아주 간단한 스프레드 시트가 전자 메일 주소를; 열 B : 보낼 메시지. (열 A는 Sheet2의 더 긴 주소 목록에서 몇 개의 전자 메일 주소를 가져 오는 수식을 사용하여 생성됩니다.)

Sheet2는 모든 전자 메일 주소의 '마스터'목록을 포함합니다 .- 열 A : 이름 ; B 열 : 전자 메일 주소

다음 코드를 시작으로 사용하고 있습니다. 그것은 Sheet1의 주소로 전자 메일을 보내고 전자 메일을 보낼 때마다 (또는 스크립트가 해당 행을 처리하는 대신) C 열의 셀을 "EMAIL_SENT"로 표시합니다.

나는 Sheet2의 C 열에있는 각 사람에게 보낸 전자 메일의 총 수를 유지하고 싶지만이 접근 방법에 가장 적합한 방법이 무엇인지 모르거나, 솔직히, 어디에서 시작 해야할지! 언급 한 바와 같이 (시트 1 만 이들의 소수를 가지고 있으며,이 목록은 매일 변경됩니다 반면)는 모든 사람의 전자 메일 주소가 포함되어 있기 때문에

function sendEmails() { 

    var sheet = SpreadsheetApp.getSheetByName('Sheet1'); 
    var EMAIL_SENT = "EMAIL_SENT"; 
    var startRow = 1; // First row of data to process 
    var dataRange = sheet.getDataRange() 
    var data = dataRange.getValues(); 

    for (var i = 0; i < data.length; ++i) { 
    var row = data[i]; 
    var emailAddress = row[0]; // First column 
    var message = row[1];  // Second column 
    var emailSent = row[2];  // Third column 

    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates 

     var subject = "Sending emails from a Spreadsheet"; 

     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT); 
     // Make sure the cell is updated right away in case the script is interrupted 
     SpreadsheetApp.flush(); 
} 
} 
} 

그래서, 나는, 시트 2의 각 사람 수를 유지하고 싶습니다.

누구든지이 문제에 대해 알려주시겠습니까? 어떤 제안이라도 대단히 감사 할 것입니다.

많은 도움을 주셔서 감사합니다.

답변

1

1 단계 : 해당 전자 메일이있는 Sheet2의 행을 찾습니다.

var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); 
var numRows = sheet2.getDataRange().getNumRows(); 
var emailList = sheet2.getRange(1,2,numRows,1).getValues(); 
var emailRow = -1; 
for (var j=0; j<numRows; j++) {   
    if (emailList[j][0]==WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR) { 
    emailRow = j; 
    break; 
    } 
} 
if (emailRow==-1) { /*ERROR! Couldn't find email.*/ } 

2 단계 : 이메일 수를 구하십시오.

var oldValue = sheet2.getRange(emailRow+1,3).getValue(); 

3 단계 : 새로운 값 + 1

sheet2.getRange(emailRow+1,3).setValue(oldValue+1); 

참고 적는다 emailRow은 제로이다 getRange()는 1부터 시작된다.

+0

안녕하세요 Phil, 솔루션을 제공해 주셔서 감사합니다. 불행히도 나는 시트 1의 모든 이메일을 통해 코드를 반복 할 수 없다. 내가 코드를 추가하기 전에 작동 했으므로 코드를 잘못된 위치에 넣었습니다. 왜 이것이 작동하지 않는지 내게 말할 수 있습니까? 'WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR'을 'emailAddress'로 바꿨고 "SpreadsheetApp.flush();"아래의 스크립트 아래쪽에 Step1 코드를 추가했습니다. "{/ * 오류! 이메일을 찾을 수 없습니다. * /}"단계 1 코드 아래에 2 단계 및 3 단계 코드를 직접 붙여 넣었습니다. 미리 감사드립니다. – Vin

+0

사과. 실수로 'i'변수를 다시 사용했기 때문입니다. 1 단계에서 'i'를 사용했던 시간을 항상 변경하십시오. 해결해야합니다. 나는 나의 대답을 업데이트 할 것이다. –

+0

대단히 감사합니다. 필. 스크립트는 이제 완벽하게 작동합니다. 그 중 하나를 발견하지 못한 것에 대한 사과! – Vin

관련 문제