양식을 제출하고 양식 데이터를 이메일에 포함 할 때 이메일을 통해 누군가에게 알리는 것에 대한 많은 게시물을 읽었으나 이미하고있는 것에 대한 업데이트를 식별하고 싶습니다 정보를 이메일에 넣고 보냈습니다. 최신 타임 스탬프를 확인하고 해당 항목을 가져와이를 수행 할 것이라고 생각합니다. 그러나, 극히 제한된 프로그래밍 기술은 내가 대답을 해결할 수 없다는 것을 의미합니다.Google 양식 제출이 업데이트 될 때 이메일 보내기
답변
나는 트릭의 가방에 이런 기능이 있습니다.
이 함수는 수신 한 이벤트 객체를 사용하는 양식 제출을 위해 formSubmitted(e)
트리거 함수가 있다고 가정합니다. 추측 하듯이, 가장 최근의 업데이트를 식별합니다. 그런 다음 시뮬레이트 된 양식 제출 이벤트를 작성하고 양식 제출 트리거 기능을 호출합니다.
onChange()
을 스프레드 시트 변경시 트리거 할 수 있습니다.
/**
* Sometimes, Google Apps Script sucks. This is one of those times.
* If a user updates previously submitted form data by using the "edit" link,
* that data will be updated in the Form Responses sheet. Unfortunately,
* that will NOT generate a spreadsheet form submission event. (See explanation:
* https://code.google.com/p/google-apps-script-issues/issues/detail?id=2969#c12)
*
* Observation: a form edit shows up as a change, with type of "OTHER", and source
* of a spreadsheet with activeSheet="Form Responses" and activeRange="A1". We
* will use that information to limit when we force our normal form-submission
* handler to run. Unfortunately, the event doesn't tell us which row changed,
* but that should be the one with the most recent timeStamp.
*/
function onChange(e) {
if (e.changeType !== "OTHER") return;
if (e.source.getActiveSheet().getName().indexOf("Form Responses") === -1) return;
if (e.source.getActiveRange().getA1Notation() !== "A1") return;
// Find latest form submission
var sheet = e.source.getActiveSheet();
var timeStamps = sheet.getRange("A2:A").getValues();
// Determine most recent date
var max = Math.max.apply(null,transpose(timeStamps)[0]);
var properties = PropertiesService.getDocumentProperties();
var lastMax = properties.getProperty("maxDate");
if (lastMax && max.toString() === lastMax) return; // Avoid changes triggered by updates from onChange function
Logger.log("onChange() thinks there's been a form edit. e="+JSON.stringify(e));
properties.setProperty("maxDate", max.toString());
var maxDate=new Date(max);
// Then find the sheet row that contains it
for (var row=0,found=false;row<timeStamps.length&&!found;row++) {
if (timeStamps[row][0] && timeStamps[row][0].getTime() === maxDate.getTime()) {
found = true;
break;
}
}
if (!found) {
// We're blind... recalc everything
// TODO
}
else {
// Trigger the submission event for this row
row += 2; // adjust for offset into sheet rows
var dataRange= sheet.getDataRange();
var data = dataRange.getValues();
var headers = data[0];
var response = data[row];
var respRange = dataRange.offset(row-1, 0, 1, dataRange.getLastColumn());
// Build event object with range, values and namedValues filled in
var values = respRange.getValues()[0];
var namedValues = {};
for (var h in headers) { namedValues[headers[h]] = [values[h]]; }
var e = { range: respRange,
values: values,
namedValues: namedValues
};
formSubmitted(e); // Simulate event
}
}
Google App Script를 사용하여 양식 응답이 저장되는 스프레드 시트를 열 수 있습니다. 도구 -> 스크립트 편집기 -> 스크립트 편집기가 열리 며 아래 기능을 복사하십시오.
양식 제출시이 함수를 호출하는 트리거를 작성하십시오. 자원 -> 현재 프로젝트의 트리거 -> '스프레드 시트에서'를 선택하고 '양식 제출시'를 선택하고 트리거를 작성하십시오.
function sendEmailNoti(e) {
var timeStamp = e.values[0];
var userEmail = e.values[1];
var products = e.values[2];
var subject = "New Subscription Request";
var email = "[email protected]";
var message = "User email : " + userEmail + "<BR>Products opted : " + products + "<BR>Timestamp : " + timeStamp;
MailApp.sendEmail({
to: email,
subject: subject,
htmlBody: message
});
}
감사합니다. 이것은 작동하는 간단한 해결책 인 것 같습니다. 변경되지 않은 이메일에 정보가 포함될 수 있습니까? E.G. 편집이 이루어지면 userEmail은 그대로 유지되지만이 경우 이메일에 메시지가 나타나지 않습니다. 또한, URL에 메시지 편집 (getEditUrl()) 형식을 사용할 수 있습니까? – Greig
이 문제는 약간 다르게 처리되었습니다. 새 트리거를 만드는 대신 양식 제출 트리거 자체를 수정하여 양식 응답 대신 스프레드 시트에서 각 키의 값을 선택합니다.
수정 된 코드는 내가이 실제로 작동합니까 것으로 나타났습니다 작업에 자신을 적용했는지 이제이
// Include a copy of all responses
for (var keys in columns) {
var key = columns[keys];
message += key + ' :: '+ sheet.getRange(resultUrls.length+1, (data[0].indexOf(key)+1)).getValues() + "<br />";
}
- 1. Google 양식 제출시 이메일 보내기
- 2. 데이터베이스가 업데이트 될 때 사용자에게 자동으로 이메일 보내기
- 3. 이메일 및 Google 문서 (양식)로 보내기
- 4. Google 양식/스프레드 시트로 확인 이메일 보내기
- 5. 페이지가로드 될 때 자동으로 이메일 보내기
- 6. 상태가 변경 될 때 이메일 알림 보내기?
- 7. PHP로 이메일 양식 보내기
- 8. 양식 제출이 지연 될 수 있습니까?
- 9. 보내기 양식 신청서 결과 이메일 주소로 보내기
- 10. 양식 제출 후 이메일 보내기
- 11. Google Apps - 닉네임으로 이메일 보내기
- 12. ASP.NET Google smtp를 통해 이메일 보내기
- 13. Google Apps Script - 양식 데이터를 제출하는 사용자로 이메일 보내기
- 14. 수정 된 열에 따라 이전 Google 양식 제출으로 이메일 보내기
- 15. 유효성을 검사하지 않을 때 양식 제출이 중지됩니다.
- 16. Google 양식> Google 시트> Google 코드 = 이메일 알림
- 17. 양식 제출이 작동하지 않습니다.
- 18. 양식 제출이 처리되지 않음
- 19. 양식 제출이 작동하지 않습니까?
- 20. jquery, 양식 제출이 완료되면
- 21. 양식 응답 (Google) - 이메일 트리거
- 22. 이메일 보내기 문제 - Google Compute Engine VM
- 23. 내 연락처 양식 페이지를 볼 때 빈 이메일 보내기
- 24. CodeIgniter를 사용하여 Google 계정으로 이메일 보내기
- 25. Google App을 사용하여 도메인에서 이메일 보내기
- 26. php 문의 양식 정보가없는 이메일 보내기
- 27. PHP 이메일 양식 무작위 텍스트 보내기
- 28. 눈에 거슬리는 "친구에게 이메일 보내기"양식
- 29. Google 웹 응용 프로그램의 서블릿에서 이메일 보내기
- 30. 사용자가 Google Apps를 사용할 때 웹 사이트에서 이메일 보내기
것 같습니다. 훌륭한 해결책. 나는 하나의 답을 정확하게 표시 할 수있을 것만 같지만 두 답은 모두 효과가 있었고 아마도 그 이점과 단점을 가지고있었습니다. – Greig