본문 바로가기
구글 앱 스크립트

스프레드시트 체크박스 한 이미지 링크 다운로드하기(Google Apps Script) [16]

by parkjp 2023. 12. 26.

서론

안녕하세요, 지난 글에서는 작성자(편집자) 메일주소를 가져오는 법을 해보았습니다.

이번 글에서는 체크박스에 체크한 이미지들의 링크를 다운로드 하는 법을 알아보도록 하겠습니다.

 

혹시나 지난 포스팅을 못 보신분들은 아래 링크를 클릭해 주세요.

https://developer-jp.tistory.com/192

 

스프레드시트 작성자(편집자) 메일주소 가져오기(Google Apps Script) [15]

서론 안녕하세요, 지난 글에서는 스프레드시트에 행과 열을 추가, 삽입하는 법을 해보았습니다. 이번 글에서는 스프레드시트에서 여러 작성자가 편집을 할때 해당 부분이 누가 편집을 했는지

developer-jp.tistory.com

반응형

예시

우선 간단하게 예시로 진행할 예정입니다.

아래 예시를 봐주세요.

체크박스와 이미지 예

위 처럼 설정을 하고 진행하도록 하겠습니다.

체크박스는 A열에 이미지 링크들은 B열에 적어두었습니다.

체크박스를 넣는 법은 스프레드시트 메뉴 - 삽입 - 체크박스를 누르시면 됩니다.

혹시나 앱스 스크립트로 체크박스를 넣기를 원하시는 분은 아래 포스팅을 확인해 주세요.

https://developer-jp.tistory.com/168

 

구글 앱 스크립트 사용법: 체크박스를 넣어보자! [3]

서론 지난 글에 이어서 이번 포스팅에서는 체크박스를 앱 스크립트로 넣는 법을 알아보겠습니다. 지난 포스팅을 안 보신분은 아래 링크를 통해 보실 수 있습니다. https://developer-jp.tistory.com/167 구

developer-jp.tistory.com

링크 다운로드하기

링크를 직접 로컬 PC에 다운로드 하기 위해서는 

색다른 방법이 필요한데요.

우선 스프레드시트의 메뉴를 커스텀하게 추가하도록 하겠습니다.

function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .createMenu('다운로드')
      .addItem('이미지 다운로드', 'download')
      .addToUi();
}

위 스크립트를 작성한 후 저장한 후 스프레드시트를 새로고침 해주세요.

 

커스텀 메뉴 추가

새로고침을 하시면 메뉴에 위 처럼 다운로드라는 메뉴가 추가되어 있을 겁니다.

일단은 아무 기능이 없는 메뉴를 추가해 놓았습니다.

이제 기능을 작성해 보도록 하겠습니다.

 

function download() {
  const activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const spreadsheet = activeSpreadSheet.getActiveSheet();

  const row = 1;
  const column = 1;
  const rownums = 10;
  const linkRow = 2;
  
  const checkboxRange = spreadsheet.getRange(row, column, rownums);
  const values = checkboxRange.getValues().flat();
  const images = [];
  
  for(let i = 0; i < values.length; i++) {
    if (values[i]) {
      const image = UrlFetchApp.fetch(spreadsheet.getRange(row + i, linkRow).getValue()).getBlob().getAs("image/jpeg").setName(`image_${row + i}.jpg`);
      images.push(image);
    }
  }

  const zip = Utilities.zip(images);
  const file = DriveApp.createFile(zip);
  
  const html = HtmlService.createHtmlOutput();
  html.append(`<a href="${file.getDownloadUrl()}" target="_blank" download="download.zip">다운로드</a>`);
  SpreadsheetApp.getUi().showModalDialog(html, 'Download');
  file.setTrashed(true);
}

저는 A1:A10 범위에 체크박스를 했으므로 row는 1, column도 1, rownums는 10으로 설정했고,

이미지 링크가 있는 컬럼은 B이니 linkRow를 2로 설정했습니다.

 

해당 부분은 각자 본인의 시트에 맞게 설정하시면 됩니다.

범위에 관해서 잘 모르시는 분은 제 블로그의 이전 글들을 참고하시면 됩니다.

 

위 스크립트를 간단하게 살펴보도록 하겠습니다.

 

1. 체크박스의 범위들을 반복문으로 체크가 되었는지 체크를 하고 체크를 했으면 해당 row의 B컬럼의 이미지 링크로

이미지를 불러와서 배열에 저장합니다.

 

2. 해당 이미지들을 zip으로 압축하고 구글 드라이브에 저장합니다.

 

3. 위에서 만들었던 커스텀 메뉴에 html <a>태그를 추가하되 <a>태그는 구글 드라이브의 zip파일 링크를 걸어두어 

클릭하면 다운로드가 될 수 있도록합니다.

 

4. 다운로드 된 zip파일은 구글 드라이브에서 휴지통으로 이동시킵니다.

 

이제 저장을하고 스프레드시트에서 다운로드 받을 이미지들을 체크하고 다운로드 메뉴 버튼을 눌러보세요.

이미지 다운로드

권한이 필요하다고 뜰 수 있는데 스프레드시트에서 드라이브에 대한 파일 접근이 필요하기 때문에

고급으로 가셔서 허용하시면 됩니다.

권한 허용까지 된다면 파일이 로컬에 다운로드 된 것을 확인하실 수 있습니다.

 

마무리

여기까지 간단하게 체크박스에 체크한 이미지들의 링크를 다운로드 하는 법을 해보았습니다.

 

혹시나 구글 앱스 스크립트에 대해 궁금하신 점이나 알고 싶으신 기능이 있으신 분은
직접 댓글로 질문해 주시면 해당 질문을 토대로 포스팅을 써보겠습니다.

다음 포스팅 바로가기:

https://developer-jp.tistory.com/194

 

스프레드시트에서 구글 앱스 스크립트 트리거를 이용하여 자동화 작업하기(Google Apps Script) [17]

서론 안녕하세요, 지난 글에서는 체크박스에 체크한 이미지들의 링크를 다운로드 하는 법을 해보았습니다. 이번 글에서는 스프레드시트에서 앱스 스크립트의 트리거 기능을 이용하여 자동화

developer-jp.tistory.com

 

반응형