번호 : 045, 작성일자: 2024-11-19

2024.11.11 ~ 2024.11.18

🤖 구글 스프레드 시트 + 앱스 스크립트


구글스프레드 시트에서 앱스스크립트 확장프로그램을 사용하면 자바스크립트 코드와 함께 사용할 수 있습니다.

앱스스크립트에서 편집기로 코드를 작성한 후 트리거를 설정하면 동작합니다.

getActiveSheet(), getColumn() 함수등등 기본적으로 제공하는 함수가 존재합니다.

아래는 체크박스를 선택하면 제목행과 해당 행들의 데이터를 슬랙메시지로 전달하는 코드 예시입니다.

// 슬랙 Webhook URL을 여기에 입력
var SLACK_WEBHOOK_URL = "${웹훅주소}";

// 슬랙으로 메시지 전송하는 함수
function sendToSlack(message) {
  var payload = {
    "text": message,
    "username": "${앱네임}",
    "icon_emoji": ":로봇_얼굴:"
  };
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}

// 셀 수정 시 실행되는 함수
function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  
  // 체크박스가 있는 I 열에서만 동작
  if (range.getColumn() === 9 && (range.getValue() === true || range.getValue() === false)) {
    var row = range.getRow();
    var headers = sheet.getRange(1, 1, 1, 8).getValues()[0]; // A1:H1 헤더 가져오기
    var values = sheet.getRange(row, 1, 1, 8).getValues()[0]; // 선택된 행의 A:H 값 가져오기
    
    // 모든 셀이 입력된 경우만 동작
    var isComplete = values.every(cell => cell !== "" && cell !== null && cell !== undefined);
    
    if (isComplete && range.getValue() === true) {
      // 슬랙 메시지 형식으로 데이터 포맷팅
      var tableRows = headers.map((header, index) => `| ${header} | ${values[index]} |`).join("\n");
      var message = `*Row ${row}의 모든 값이 입력되었습니다:*\n${tableRows}`;
      
      // 메시지 슬랙 전송
      sendToSlack(message);
      
      // 전송 후, 체크박스를 다시 false로 설정하여 중복 전송 방지
      range.setValue(false);
    }
  }
}

🙋🏻‍♂️ 기타 사항


  1. 모듈화를 진행하면서 SwiftUI+MVVM 아키텍쳐패턴 작업
  2. 2024년 회고록 작성