Google Spreadsheet 수정 시 이메일로 알림받기
2024. 5. 9. 00:11ㆍ잡기술
1. 스프레드시트에서 App script 실행

2. 코드작성
function onEdit(e) {
var userEmail = Session.getActiveUser().getEmail(); // 수정한 사용자 이메일 주소 가져오기
var anonymous = !userEmail; // 이메일이 빈 경우 anonymous로 간주
var range = e.range; // Range that was edited
var sheetName = range.getSheet().getName(); // 수정 된 시트
var editedContent = range.getValue(); // 수정 된 내용
var subject = 'Sheet is Edited';
var body = `- sheet: "${sheetName}"\n`;
if (anonymous) {
subject += ` by ANONYMOUS.`
body += `- User: anonymous\n- Cell: ${range.getA1Notation()}\n- Contents: "${editedContent}".`;
} else {
subject += ` by ${userEmail}`
body += `- User: ${userEmail}\n- Cell: ${range.getA1Notation()}\n- Contents: "${editedContent}".`;
}
if (userEmail != 'My-mail@My_mail.com'){
MailApp.sendEmail({
to: "My-mail@My-mail.com", // 알람을 보내고자하는 메일 주소
subject: subject,
body: body
});
}
}
- 코드는 .GS 확장자로 되어있음. GS는 Google 애플리케이션 스크립트로 '자바 스크립트'를 기반으로 온라인 Google 제품에서 작업을 자동화에 사용되는 스크립트임.
- 내가 수정 한 경우에도 메일을 받아야하기 때문에 수정자 메일 주소가 내 메일과 일치하면 메일 보내지 않도록 함.
3. 트리거 설정
- 스크립트 파일을 저장
- 왼쪽 바에서 '트리거'로 이동
- '트리거 추가' 클릭
- 이벤트 유형 선택 '수정 시' & 실행할 함수를 onEdit으로 설정

4. 테스트 결과

ENJOY--
여담.
시크릿 모드로 접속하여 볼 경우 메일이 보내지지 않는 문제가 생김
그래서 다음과 같이 수정함.
function onEdit(e) {
var userEmail = Session.getActiveUser().getEmail();
var anonymous = !userEmail;
try{
var range = e.range;
var sheetName = range.getSheet().getName();
var editedContent = range.getValue();
// Modify the email content based on user status
var subject = 'Sheet Edited';
var body = `- sheet: "${sheetName}"\n`;
if (anonymous) {
subject += ` by ANONYMOUS.`
body += `- User: anonymous\n- Cell: ${range.getA1Notation()}\n- Contents: "${editedContent}".`;
} else {
subject += ` by ${userEmail}`
body += `- User: ${userEmail}\n- Cell: ${range.getA1Notation()}\n- Contents: "${editedContent}".`;
}
}
catch(error){
var subject = 'Sheet Edited by Private? or Error';
var body = `alert: ${error.message} `;
MailApp.sendEmail({
to: "My-mail@My_mail.com",
subject: subject,
body: body
});
}
if (userEmail != 'My-mail@My_mail.com'){
MailApp.sendEmail({
to: "My-mail@My_mail.com",
subject: subject,
body: body
});
}
}
시크릿 모드로 접속하여 수정하는 경우 getEmail 과 e.range 에서 값을 정상적으로 가져오지 못한다.
원래는 이 경우 권한을 검토하는 코드를 추가 해야겠지만...
내가 수정이 일어남을 인지하기 위한 용도 이기 때문에 강제 실행 코드로 메일을 보내도록 하였다.
시크릿 모드일지라도 onEdit 이벤트는 정상적으로 실행되기 때문에 상관없다.
'잡기술' 카테고리의 다른 글
Zotero 서지관리 프로그램 (0) | 2024.06.18 |
---|---|
데이터 정규화 방법 (avg, std, normalization) (2) | 2024.06.04 |
파워포인트 팁 (용량 줄이기, 단축키) (0) | 2024.05.14 |
Endnote 논문이 포함된 그룹 찾을수 있게 커스텀하기 (0) | 2024.05.14 |
일러스트로 리플렛 만들기 (0) | 2024.04.23 |