업무를 진행하면서 생각보다 구글 스프레드시트를 사용하는 일이 빈번하다.
Apps Script
를 사용하면 구글 스프레드시트에서 자동화를 구축할 수 있을 뿐만 아니라 구글에서 제공하는 Drive, Docs 등에 접근하여 업무를 처리할 수 있다.
(물론 여러 권한 등의 문제로 제한이 많긴 하다,,)
필자 역시 하나씩 업무를 처리해야 하는 상황에서 효율적으로 자동화할 수 있도록 부서 내에 Apps Script
를 도입했다.
Apps Script
는 JavaScript
와 문법이 동일하기 때문에 기존 JavaScript
를 알고 있는 사람이라면 쉽게 이해하여 업무 자동화에 기여할 수 있을 것이다.
Apps Script
로 스프레드 시트 내에서 데이터를 다뤄 원하는 값을 뽑아낼 수도 있겠지만, 이번 글에서는 다음과 같이 이메일을 전송할 예정이다.
또한, 구글 드라이브에 접근해 이미지를 추출한 후 링크에 삽입할 예정이다.
위와 같은 예제는 수료생들 마다 각기 다른 이름과 첨부파일을 다뤄야 하지만 이 부분도 Apps Script
로 쉽게 해결이 가능하다.
우선, 구글 스프레드 시트에 접속한 이후
확장 프로그램 > Apps Script에 접속하면 아래 이미지와 같이 에디터가 나오는 것을 확인할 수 있다.
에디터엔 자동으로 myFunction()
이라는 함수가 적혀 있을 것이고 중괄호의 실행문에 원하는 코드를 작성하면 된다.
간단히 아래와 같이 console.log('Hello world')
를 작성한 후 실행 버튼을 눌러보자.
(참고로 ES6도 지원하기 때문에 화살표 함수도 가능하다.)
DOM API
을 통해 HTML
요소에 접근하듯이 Apps Script
로 구글 스프레드 시트에 접근할 수 있다.
우선 다음과 myFunction()
함수 실행문에 다음과 같이 작성하면 원하는 범위에 접근할 수 있다.
const myFunction = () => {
// 구글 스프레드시트에 접근
const ss = SpreadsheetApp.getActiveSpreadsheet();
// 해당 스프레드시트의 탭에 접근
const sheet = ss.getActiveSheet();
// 해당 탭의 A1에 접근
const data = sheet.getRange("A1").getValue();
이제 A1
에 임의의 데이터를 넣고 console.log(data)
로 출력해보면 다음 이미지와 같이 권한에 관련된 모달창이 뜰 것이다.
그럼 계정에 로그인한 뒤,
고급 > 제목 없는 프로젝트(Apps Script 에디터 이름)로 이동 > 허용
을 누르면 권한을 부여하고 원하는 작업을 수행할 수 있다.
Apps Script MailApp 를 보면Apps Script
를 통해 Gamil을 발송하는 예제가 나와있다.
다음은 Apps Script
를 통해 Gmail을 보내는 코드 예제이다.
MailApp.sendEmail({
to: "recipient@example.com",
subject: "Logos",
htmlBody: "inline Google Logo<img src='cid:googleLogo'> images! <br>" +
"inline YouTube Logo <img src='cid:youtubeLogo'>"
});
to
는 메일 주소, subject
는 메일 제목, htmlBody
는 메일 본문이다.
이때 htmlBody
는 꼭 html 마크업 언어로 작성해서 보내야 한다.
그럼 이제 다음 이미지와 같이 스프레드시트에 주소, 제목, 본문을 작성해서 메일을 보낼 수가 있다.
const myFunction = () => {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const subject = sheet.getRange("A1").getValue();
const main = sheet.getRange("A2").getValue();
const address = sheet.getRange("A3").getValue();
MailApp.sendEmail({
to: address,
subject: subject,
htmlBody: main,
});
}
}
이제 반복문을 통해서 메일 발송할 주소와 이름만 수정해주면 구현 모습의 이미지에서 봤던 것처럼 개개인에게 메일을 발송할 수가 있다.
제목과 본문에서 이름 자리를 비워둔 채, 개개인의 이름을 넣어 주었다.
특히 A2
인 본문의 첫번째 줄에는 block
요소인 p
태그를 없애주면서 한 줄에 표시될 수 있도록 했다.
아래 이미지와 같이 보낼 이름과 주소를 나열해 준 뒤, 다음과 같이 코드를 적을 수 있겠다.
추가로 try ~ catch
문을 작성해서 메일 전송 여부를 판단했다.
const myFunction = () => {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const subject = sheet.getRange("A1").getValue();
const main = sheet.getRange("A2").getValue();
for (let i = 6; i <= 9; i++) {
try {
name = sheet.getRange("C"+i).getValue();
address = sheet.getRange("D"+i).getValue();
MailApp.sendEmail({
to: address,
subject: name+subject,
htmlBody: name+main,
});
sheet.getRange("E"+i).setValue("O");
} catch (err) {
sheet.getRange("E"+i).setValue("X");
}
}
console.log("완료")
} catch (err) {
console.log("실패")
}
}
실행 버튼을 눌렀을 때 Email에 접근하는 것이기 때문에 역시 권한 부여에 관해 알림창이 뜨지만 위와 같은 방법으로 권한을 부여해주면 된다.
중간중간 br
태그만 조금 빼주면 될 듯하다.
다음 글에선 App Script
를 통해 구글 드라이브에 접근해서 원하는 이미지를 메일에 보내는 방법을 작성하겠다.