소개
home

While 반복문 & 구글 드라이브 활용하기

태그
스크립트
구글시트
while
DriveApp
getFolderByName
next
getFiles
hasNext
getName
getSize
makeCopy
샘플링크
https://docs.google.com/spreadsheets/d/1hfri1kZE4TRHTdQfFC31ueb1rF0vOXFSGdAwFWqWnd8/edit?usp=sharing
난이도
☆☆
4 more properties

목적

구글 스프레드시트의 스크립트 편집기를 사용하여, 사용자가 전송하기 원하는 이메일 주소로 HTML 요소를 추가하여 편집한 메일을 전송하는 기능을 익힙니다.

예제 1 - 또 다른 반복문 문법 while 문

구글 드라이브를 제어하는 문법을 다루기 전에, 구글 스크립트에서 사용할 수 있는 또 다른 반복문 문법에 대해 알아보겠습니다.
구글 스크립트에서 사용하는 반복문이라고 하면 특정 조건을 만족할 때까지 중괄호 내의 코드를 반복해서 수행한다는 점을 for 반복문으로 여러 번 사용해서 배우셨을 것입니다.
(링크 클릭 시 for 반복문에 대해 알려 드리는 페이지로 이동합니다.)
이 for 반복문 말고도 구글 스크립트에서 사용할 수 있는 또 다른 반복문 문법이 있는데, 이제부터 알려드릴 while 문이 그것입니다.
아래는 while 문의 기본적인 문법 및 실행 결과입니다.
function myFunction() { var x = 20; while(x>0){ Logger.log(x); x = x - 1; } }
JavaScript
스크립트
for() 반복문을 사용할 때 소괄호 내에 세미콜론(;) 으로 구분하면서 조건들을 사용하던 것과는 크게 차이점이 있는 문법입니다.
소스 코드를 해석하면 변수를 지정하는 코드가 소괄호의 밖으로 빠져 있고, 소괄호에는 핵심 조건만 들어가는 것으로 간소화된 대신, 중괄호 내에 못 보던 코드인 다음 코드가 추가되어 있습니다.
x = x - 1; // 반복문에서 사용한다는 가정하에 "x--;" 과 같은 말입니다.
JavaScript
즉 변수 x 가 20으로 지정되어 있는 상태에서 x 가 0 보다 크다는 조건을 만족하는 동안 실행 로그에 변수 x 의 값을 표시하면서 x 를 1씩 차감하는 작업을 반복 수행한다는 내용입니다.

예제 2 - 구글 드라이브에서 파일 정보 가져오기

이제 구글 드라이브의 파일을 활용하는 법에 대해 알아 보겠습니다.
활용하기에 앞서 예시와 같이 구글 드라이브를 사용할 구글 계정이 있어야 하며, 아래와 같이 어느 정도 세팅을 해둘 필요가 있습니다.
예제에 사용된 예를 들자면 용량이 제각기 다른 임의의 이미지들과 "700kb 이상", "700kb 미만" 이라는 이름의 빈 폴더 2개가 있습니다.
구글 드라이브 세팅
아래 첨부 파일은 구글 드라이브 예제에 사용한 임의의 배경화면과 오토오피스, 앱디자인, 캐릭터박스의 로고가 첨부된 파일입니다.
예제 파일.zip
6145.2KB
이제 구글 드라이브에 접근하는 일부 메소드들을 활용하는 방법에 대해 알아 보겠습니다.
아래 코드는 구글 드라이브에 생성한 "다운로드한 사진들" 폴더에 있는 모든 파일들의 이름과 용량 정보를 실행 로그에 출력하는 코드입니다.
function getTheFiles() { var dApp = DriveApp; var folderIter = dApp.getFoldersByName("다운로드한 사진들"); var folder = folderIter.next(); var filesIter = folder.getFiles(); var i = 1; while(filesIter.hasNext()){ var file = filesIter.next(); var filename = file.getName(); var filesize = file.getSize(); Logger.log(filename); Logger.log(filesize); i++; } }
JavaScript
스크립트
스크립트 결과
다음 코드와 같이 입력하면 스프레드시트에 각 파일과 파일에 해당되는 용량을 입력하게 됩니다.
function getTheFiles() { var dApp = DriveApp; var folderIter = dApp.getFoldersByName("다운로드한 사진들"); var folder = folderIter.next(); var filesIter = folder.getFiles(); var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var i = 1; while(filesIter.hasNext()){ var file = filesIter.next(); var filename = file.getName(); var filesize = file.getSize(); ss.getRange(i, 1).setValue(filename); ss.getRange(i, 2).setValue(filesize); Logger.log(filename); Logger.log(filesize); i++; } }
JavaScript
스크립트
스크립트 결과

예제 3 - 구글 드라이브에서 파일 제어하기 - 지정한 폴더에 파일 복사

이제 구글 드라이브에서 파일을 제어하는 방법 중에 하나를 알아 보겠습니다.
이 예제에서는 특정 폴더로 파일들을 복사하되, 조건문을 사용하여 특정 용량이 넘는지 안 넘는지를 구분하여 복사되는 파일을 달리하는 내용입니다.
function getTheFiles() { var dApp = DriveApp; var folderIter = dApp.getFoldersByName("다운로드한 사진들"); var folder = folderIter.next(); var filesIter = folder.getFiles(); var largeFolder = folder.getFoldersByName("700kb 이상").next(); var smallFolder = folder.getFoldersByName("700kb 미만").next(); var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var i = 1; while(filesIter.hasNext()){ var file = filesIter.next(); var filename = file.getName(); var filesize = file.getSize(); ss.getRange(i, 1).setValue(filename); ss.getRange(i, 2).setValue(filesize); if(filesize > 700000){ file.makeCopy(largeFolder); } else { file.makeCopy(smallFolder); } Logger.log(filename); Logger.log(filesize); i++; } }
JavaScript
스크립트
"다운로드한 사진들" 폴더 하위에 있는 모든 이미지 파일을 같은 루트의 폴더에 복사하되, 용량이 700kb 이상인 파일은 "700kb 이상", 700kb 미만의 파일은 "700kb 미만" 폴더에 복사하는 코드입니다.
구글 스프레드시트만을 사용하는 이제까지의 스크립트와는 달리, 이 스크립트는 구글 드라이브도 제어하기 때문에 스크립트 실행 완료까지는 다소 시간이 소요됩니다.
조건문에 사용되는 700000 은 비트 단위, 즉 1이면 1b 이기 때문에 1kb 를 입력하려면 1000 으로 입력해야 하며, 700kb 는 1000 x 700 인 700000 으로 입력해야 합니다.
스크립트 결과. 용량이 700kb 미만인 로고 이미지와 일부 배경 이미지가 복사되었음.
스크립트 결과. 용량이 700kb 이상인 일부 배경 이미지가 복사되었음.

관련 포스팅