Google Workspace의 문서(Google Sheets 등)를 첨부하여 메일로 발송하기 위한 App Script.

매일 손으로 수집해야 하는 데이터를 엑셀파일로 정리하여 일보고 하라는 지시. 그런데 해당 데이터는 또 혼자 수집할 수 있는게 아니라, 여럿이 각각 수집해야 함.

그래서 Google Works에 Sheets문서를 만들어 공유한 후, 각 담당에게 자기가 맡은 부분의 데이터를 채워넣으라고 했다. 그리고는 App Script를 이용하여 하루에 한 번 자동으로 해당 문서를 첨부파일로 하는 보고 메일을 발송하도록 작성.

function sendEmailWithAttachment() {
  var day = (new Date()).getDay() % 7;
  if (day === 0 || day === 6) { // 토요일, 일요일에 실수로 보고하지 않도록.
    return;
  }
  var sheetId = "1q...xi3Tk"; // Google Sheets ID
  var currentDate = new Date();
  var formatted = Utilities.formatDate(currentDate, Session.getScriptTimeZone(), "yyyy-MM-dd");
  var url = "https://docs.google.com/spreadsheets/d/" + sheetId + "/export?format=xlsx";
  var params = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}
  };
  var blob = UrlFetchApp.fetch(url, params).getBlob().setName(`File_${formatted}.xlsx`); // 첨부파일 이름
  var recipientEmail = "recipient@somewhere.com"; // 수신인
  var subject = "REPORT: " + formatted; // 메일 제목
  var body = `일보고문서 ${formatted} 입니다. 감사합니다.`; // 메일 본문
  GmailApp.sendEmail(recipientEmail, subject, body, {
    cc: "cc@somewhere.com, cc2@somewhere.com", // 수신참조 
    attachments: [blob],    
  });
}

Google Sheets의 문서 아이디는 해당 문서의 URL 중간에 적혀있다.


이거 따로 뽑아주는 함수가 있긴 한데, 범용적으로 쓰려면 그렇게 하면 되겠으나… 여하튼 현재 문서의 ID를 얻으려면,

DocumentApp.getActiveDocument().getId()

를 사용하면 됨.


0개의 댓글

답글 남기기

아바타 플레이스홀더

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다