2016-07-20 6 views
0

사용자가 Google 시트를 Google 시트에 제출할 때마다 양식 필드의 이메일 주소를 사용하여 자동으로 이메일 답장을 보내도록 OnSubmit 기능을 트리거하고, 옳고/잘못 '데이터 제출 확인. 최신 양식 제출 데이터가 시트의 마지막 행에 들어가기 때문에 다음 코드를 사용하여 시트의 두 데이터를 모두 추출했습니다 (전자 메일 주소에 함수 매개 변수를 사용할 수 있음에도 불구하고).Google 양식 제출시 이메일 보내기

또한 양식 제출 이벤트 트리거 및 전자 메일 인증을 이미 설정했습니다. 그러나 전자 메일은 작동하지 않는 것 같습니다. 양식 제출시 트리거되도록 설정되어 있으면 스크립트 편집기에서이 기능을 실행해야합니까? 실행을 클릭하면 코드가 실행 시간을 초과합니다.

function OnSubmit(e) { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = sheet.getLastRow()-1; 
    var numRows = 1; // Number of rows altogether 


    // Fetch the range of cells A(last row):G(last row) 
    var dataRange = sheet.getRange(startRow, 1, numRows, 7); 

    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[2]; // Column C of last row 
    var message = ""; 
    while(row[6] === "") {  // Delay until data verification is done 
    Utilities.sleep(10000); 
    } 
    var subject = row[6] // Column G (data verification cell) of last row 
    MailApp.sendEmail(emailAddress, subject, message); 
    } 
} 
+0

로거를 사용하여 실행 추적 –

+0

좀 자세히 설명해 주시겠습니까? Google Apps 스크립트를 처음 사용해 본 것은 이번이 처음입니다. 온라인으로 읽은 내용을 토대로 코드를 정리했습니다. –

+0

이 코드 부분은 사용할 수 없습니다. 'while (row [6] === "") {// 데이터 확인이 완료 될 때까지 지연 Utilities.sleep (10000); }'함수가 호출 될 때 row [6]이 비어 있으면 루프가 항상 무한대가되도록 스크립트 실행 중에 데이터가 업데이트되지 않기 때문입니다. –

답변

0

계산이 완료 될 때까지 스크립트를 대기 시키려고합니다. 그러나

,

while(row[6] === "") { 
Utilities.sleep(10000); 
} 

이것에 대해 갈 수있는 잘못된 방법입니다 : 변수 row 루프에서 변경되지 않습니다. 데이터 가져 오기 라인 var data = dataRange.getValues();while 루프 내부에있을 수 있습니다.

그러나 더 나은 변화가 실제로 일어날 대기보다 보장하는 방법이있다 :이 보류 계산을 적용하고, 그 while 루프에 대한 필요성을 제거합니다

SpreadsheetApp.flush(); 

var data = dataRange.getValues(); 전에 사용은. 결과 :

function OnSubmit(e) { 
    SpreadsheetApp.flush(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var dataRange = sheet.getRange(sheet.getLastRow(), 1, 1, 7); 
    var data = dataRange.getValues(); 
    var row = data[0]; 
    var emailAddress = row[2]; // Column C of last row 
    var message = ""; 
    var subject = row[6] // Column G (data verification cell) of last row 
    MailApp.sendEmail(emailAddress, subject, message); 
} 
+0

루프 문제를 지적 해 주셔서 감사합니다! 그러나 계산 된 데이터 (col G)는 제출 양식에 없기 때문에 함수 매개 변수가 아닌 시트의 마지막 행에서 추출해야했습니다. 또한 데이터를 가져 오기 전에 계산이 완료되었는지 여부를 확인해야하는 계산 지연이 있습니다 (따라서 루프의 잘못된 사용). 내가 할 수있는 방법이 있니? –

+0

OnEdit은 시트를 닫은 채로 실행하는 동안 시트를 열어야하므로 둘 중 하나처럼 작동하지 않는 것 같습니다. –

+0

좋아, 내 대답을 업데이트 –

관련 문제