본문 바로가기

구글 오피스/앱스 스크립트

구글 스프레드시트 공유 기간 설정, 공유 삭제, 마감 기한 설정(트리거 사용)

320x100

 

구글 스프레드시트 공유 기능을 이용하여 다른 사람들에게 스프레드시트를 공유하고 일을 하다가 마감을 위한 설정이 필요할 때가 있습니다.

구글 워크스페이스 사용자의 경우에는 각각의 공유자 별로 공유 일자를 설정 해 줄 수 있지만, 일반 사용자의 경우에는 특별히 기간을 설정해줄 수 있는 방법이 없는데, 구글 스크립트 트리거 기능을 이용하면 설정이 가능합니다.

스프레드시트의 함수를 사용하는 것이 아니라 Apps Script를 사용해야 하므로 약간 까다로울 수 있지만, 한 번 제대로 설정해두면 필요한 만큼 공유 시간을 조절 할 수 있으므로 매우 유용합니다.

특별한 이벤트를 위해서 스프레드시트를 공유하고, 나중에 마감 시간이 되면, 다른 사용자들이 접근 할 수 없게 설정 할 수 있으므로 매우 편리합니다.

[ 사용법 ]

1. 메뉴에서 확장프로그램 > Apps Script를 클릭하여 스크립트 에디터 화면으로 들어갑니다.

2. 토스트에 '신청 마감 일시'의 시간을 적어주어, 공유자들이 화일을 열 때 마다 상기시켜줍니다.(필요없는 경우 토스트 삭제)

3. 마감일, 마감 시간을 형식에 맞추어 '1. 신청 마감 일시'의 시간으로 설정 해줍니다.

스크립트

4. 메뉴 My Menu > 마감일 지정을 누르면 지정된 시간으로 설정 됩니다.

5. 메뉴 My Menu > 마감일 삭제를 누르면 마감시간 설정이 삭제 됩니다.

6. 메뉴 My Menu > 마감일 삭제를 누르면 마감시간 설정이 삭제 됩니다.

6. 설정된 날짜(트리거 설정)가 되면 공유 설정을 해제 하고 자신만 볼 수 있게 설정이 바뀝니다~!

[ 스크립트 내용 ]

1. 마감에 대한 내용을 스프레드시트를 열 때 마다 토스트를 통해서 지속적으로 알려줍니다.

function onOpen() {

  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('My Menu')  
      .addItem('마감일 지정', 'Start')
      .addItem('마감일 삭제', 'deleteAlltriggers')
      
      .addToUi();

  // 1. '신청 마감'을 토스트를 통해서 알림
  var title = '신청 마감 일시';
  var message = "2021년 03월 19일 저녁 7시이며, 이후에는 신청하실 수 없습니다!";
  SpreadsheetApp.getActiveSpreadsheet().toast(message, title, 3);   
  }

2. 프로젝트 안에 있는 모든 트리거를 지워 초기화 한 후 마감시한을 트리거로 설정한 스크립트를 실행시켜 마감 시한을 넣어줍니다.

function Start() {

  var triggers = ScriptApp.getProjectTriggers();
  for (var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  var timeZone = Session.getScriptTimeZone();
  Logger.log(timeZone);


// 2. 마감일, 마감 시간을 설정   
    let date = "2021-03-19"  
    let time = "19:00"

    let offset_to_utc = "+09:00"
    var expireAt = new Date(date + "T" + time + offset_to_utc);   
     

  Logger.log(expireAt);
  if ( !isNaN ( expireAt.getTime() ) ) {
    ScriptApp.newTrigger("RemoveAllAccess")
             .timeBased()
             .at(expireAt)
             .inTimezone("Asia/Seoul")
             .create();
  }
  
  Browser.msgBox( date + ", " + time + "로 마감 설정되었습니다.");
}
 

 

3. 공유된 사람들의 권한을 전부 초기화 시켜서 자신만 편집 할 수 있도록 합니다.

function removeAllAccess() {

  var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId()
  var file = DriveApp.getFileById(spreadsheetId);

  var editors = file.getEditors();
  var viewers = file.getViewers();
  var permission = file.getSharingPermission();
      file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);

  for (var i=0; i<viewers.length; i++) {
    file.removeViewer(viewers[i]);
  }
  for (var i=0; i<editors.length; i++) {
    file.removeEditor(editors[i]);
  }
}

 

 

728x90