2017-09-06 12 views
0

나는 사람들이 스탬프 열 A로 전환 자동으로 시간 표시로, 열 L 다음 미래의 날짜/시간을 12 시간 계산 Example Sheet셀의 날짜/시간을 기반으로 Google 시트에서 전자 메일을 자동으로 생성 하시겠습니까?

이 스프레드 시트를 가지고있다.

열 L의 지정된 시간에 열 K의 주소로 자동 전자 메일을 생성하고 싶습니다. -ONLY IF- 사람이 " 시간 초과 됨 "열

기본적으로 사람들은 로그인하는 것이 좋습니다. 그러나 로그 아웃하는 것을 잊지 마십시오. 나는 그 (것)들을 위해 장으로 다시 들어가고 서명 시간을두기 위하여 신호 전자 우편을 자동화하고 싶다. 그렇지 않으면 전자 메일 알리미가 표시됩니다.

전자 메일의 표준 제목 줄은 다음과 같습니다. "로그 아웃하십시오." 전자 메일의 표준 본문은 다음과 같습니다. "로그 아웃하지 않은 것 같습니다.이 링크를 클릭하십시오. 지금 로그 아웃하십시오 "

시트가 열려 있지 않아도 스크립트를 만들 수 있도록 시간 또는 분당 트리거를 사용할 수 있습니까?

매우 A-B-C 스크립트를 작성하는 데는 문제가 없지만이 시나리오는 검색 범위 밖일 뿐이므로이 시나리오를 검색하지 않는 경우가 있습니다.

미리 도움을 청하십시오.

+0

코드 구현을 위해 [관련 SO 게시물] (https://stackoverflow.com/a/21744490/5995040)을 확인하실 수 있습니다. 그런 다음 [Time-driven triggers] (https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers)를 사용하면 스크립트를 특정 시간이나 반복에 실행할 수 있습니다. 또한 Apps 스크립트 서비스가 일상적인 [할당량] (https://developers.google.com/apps-script/guides/services/quotas) 및 일부 기능에 대한 엄격한 제한을 부과한다는 점에 유의하십시오. 희망이 도움이됩니다. –

+0

나는 내 필요에 맞게 코드를 조정하려고했지만 문제가 계속 발생합니다. 지나치게 힘들어하는 부분은 열 I에 데이터 입력이 없을 때만 전자 메일을 보내는 것입니다. 코드의 나머지 부분에서/그 다음에 논리를 작성하는 방법을 모르겠습니다. 나는 계속해서 혼란스러워 할 것이지만, 더 나은 코더의 도움 없이는 해결할 수 있다고 확신하지 못합니다. –

+0

아마도 더 간단한 해결책은 클록 트리거에있는 스크립트를 사용하여 다양한 필드가 채워지는 여부와 스크립트가 실행되기 시작하는 시간에 대한 이메일 로직을 3 시간마다 (& 말) 빌드하고 빌드하는 것입니다. 사용자가 로그인 할 때마다 새 클럭 트리거를 작성하는 것보다 구현하기가 쉽습니다. 원하는 수준의 응답 성을 제공하지는 못하지만 목적에 충분합니까? 우리가 논리를 검토하고 조언 할 수 있도록 몇 가지 코드를 게시하십시오. –

답변

0

또 다른 이메일 질문

이것은 완전히 테스트되지 않았지만 사양에 쓰여졌습니다. 나는 그것이 당신을 위해 일하는 것이 좋기를 바랍니다. setup 트리거와 스크립트 자체를 실행하여 권한을 부여해야합니다. 또한 전자 메일을 보내고 뭔가를 채울 때까지 일반적으로 비어있는 열을 만들어야합니다. && vA[i][column number - 1]과 같은 send 문을 if 문에 넣으십시오. sh.getRange(i+1,column number).setValue('Dont send again'); 그리고 나서 다음에 스크립트를 실행하면 이미 스크립트를받은 사람들에게 전자 메일을 보내지 않습니다.

function sendEmailToThoseWhoHaveNotSignedOut() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getSheetByName('Sheet1'); 
    var rg=sh.getDataRange(); 
    var vA=rg.getValues(); 
    var lastHeaderRow=1; 
    var now=new Date(); 
    var rdq=MailApp.getRemainingDailyQuota(); 
    for(var i=lastHeaderRow;i<vA.length;i++) 
    { 
    if(new Date(vA[i][11]).valueOf()<now.valueOf() && !vA[i][8] && vA[i][10] && rdq>0) 
    { 
     MailApp.sendEmail(vA[i][10], 'Please Remember to Sign Out', 'It appears you may not have signed out, please click this link to sign out now.') 
    } 
    } 
} 

function setUpMyTrigger() 
{ 
    if(!isTrigger('sendEmailToThoseWhoHaveNotSignedOut'))//This prevents you from setting up more than one trigger at a time for the same function. 
    { 
    ScriptApp.newTrigger('sendEmailToThoseWhoHaveNotSignedOut').timeBased().everyHours(1).create(); 
    } 
} 

function isTrigger(funcName) 
{ 
    var r=false; 
    if(funcName) 
    { 
    var allTriggers=ScriptApp.getProjectTriggers(); 
    var allHandlers=[]; 
    for(var i=0;i<allTriggers.length;i++) 
    { 
     allHandlers.push(allTriggers[i].getHandlerFunction()); 
    } 
    if(allHandlers.indexOf(funcName)>-1) 
    { 
     r=true; 
    } 
    } 
    return r; 
} 
+0

쿠퍼, 위 스크립트에 감사드립니다. 거의 나를 위해 일하고있다. 열 순서 등을 약간 조정했는데 매 시간마다 전자 메일을 보냅니다. 지금 당장 또는 적어도 내가 알 수있는 한 문제는 셀에 "로그 아웃"시간이 입력되었는지 여부와 관계없이 전자 메일을 보내는 것입니다. 또한 하단 전자 메일로만 보냅니다. 코드를 보면서 나는 이것을 고치기 위해 어떤 매개 변수를 변경해야하는지 알 수 없습니다. 이제 위의 예제 시트에서 목록의 두 번째 이름으로 매시간 전자 메일을 보냅니다. –

+0

*** 수정, 로그 아웃 시간 열에 로그 아웃 시간이 있는지 여부와 관계없이 두 전자 메일 또는 "모든"전자 메일로 보냅니다. 해당 열/셀의 시간을 올바르게 인식하고 전자 메일이 비어있는 경우에만 전자 메일을 보내도록 수정하는 방법은 무엇입니까? –

+0

예제 시트에 위에서 언급 한 열 조정 내용이 반영되어 있습니까? – Cooper