본문 바로가기

꿈꾸는 어린 양/공부해요

스프레드시트 활용 - 구글 설문지 결과를 메일로 백업하는 스크립트

/* 기본 변수 설정 */
var SHEET_NAME = "시트명";
var SHEET_CODE = "문서코드";
var SHEET_TITLE 
= "메일제목 - " + Utilities.formatDate(new Date(), "GMT+9", "yyyy-MM-dd hh:mm"); 
// 메일 제목에 발송 날짜와 시간 추가
var emailAddress = "이메일주소";

/* 시트 데이터 가져오기 */
var ss = SpreadsheetApp.openById(SHEET_CODE); // 문서 호출
var sheet=ss.getSheetByName(SHEET_NAME); // 시트 호출
var numRows = sheet.getLastRow(); // 시트 내의 데이터 수
var numCols = 12; // 메일로 보낼 column 수. 모든 컬럼을 보내려면 sheet.getLastColumn(); 로 쓰면 됩니다.

/* 이하 이메일을 보내는 함수의 내용 */
function sendEmails() {
// 이메일로 보낼 데이터 영역
var dataRange = sheet.getRange(1, 1, numRows, numCols);
var data = dataRange.getValues();
// 본문 초기화
var bodydata = ""; 
for (var a = 0; a < numRows; a++) { 
var data1 = dataRange.getValues(); // 각행의 셀 값을 가져와서
var row = data1[a]; // 값을 배열로 정리
var cells = "<tr>";
// 각 컬럼별 데이터 추출
for (var b = 0; b < numCols; b++) { 
cells = cells + "<td>" + row[b] + "</td>";
}
cells = cells + "</tr>";
bodydata = bodydata + cells;
}
 
var all_message = SHEET_TITLE + "<br><br><table border='1'>" + bodydata + "</table>"; // 메일 본문

MailApp.sendEmail(emailAddress, SHEET_TITLE, all_message, {htmlBody:all_message}); // 메일 발송
}

슬슬 팁앤테크가 아니라 개인 로그가 되어가는 기분이 들지만 열심히 주석을 달아보았습니다.

나중에 또 쓸 일이 생기겠죠 분명.

여기에 트리거를 걸어서 2시간에 1회씩 담당자에게 이메일로 데이터를 보내고 있어요.

등록자 수가 적고 데이터 쌓이는 간격이 넓다면 시트에 변동이 생길 때마다 메일을 보내도록 하면 되겠죠?

 

아래는 백업

function showKeyCode(event) { 
    event = event || window.event;
    var keyID = (event.which) ? event.which : event.keyCode;
    if( ( keyID ==8 ) || ( keyID ==46 ) || // 8: backspace, 46: delete
          ( keyID >=48 && keyID <= 57 ) || ( keyID >=96 && keyID <= 105 ) ) return; // 숫자 ok
    else return false; // 문자는 무반응 > 아래 캐릭터 삭제와 함께 사용
}

function removeChar(event) { // 문자 입력시 자동 제거
    event = event || window.event;
    var keyID = (event.which) ? event.which : event.keyCode;
    if ( keyID == 8 || keyID == 46 || keyID == 37 || keyID == 39 ) return;
    else  event.target.value = event.target.value.replace(/[^0-9]/g, "");
}

// 아래는 ajax 하단 내용 추가.
// 버튼 클릭시 동작 추가 > 여러번 클릭 방지
// 버튼 자체 이벤트로 버튼 비활성화
//  onclick="sendCmt();this.disabled=true; this.value='잠시만 기다려주세요...';"

success:function(){
    alert("등록되었습니다.\n감사합니다."); // 성공 alert 띄우고
    document.getElementById("sbbtn").value = "등록되었습니다."; // 버튼 내용 바꿔준 뒤
    window.location.replace('http://dear.pe.kr'); // 성공 페이지로 이동
}