달나라 노트

Google Apps Script : createFilter, getFilter (Script로 filter 조작하기) 본문

Google Apps Script

Google Apps Script : createFilter, getFilter (Script로 filter 조작하기)

CosmosProject 2021. 8. 5. 00:22
728x90
반응형

 

 

Script로 엑셀의 필터를 생성하고 조작해봅시다.

 

현재 시트 정보는 위와 같습니다.

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getRange('B2:D8').createFilter();
}

코드는 위와 같습니다.

 

- var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

Script를 이용해 Spreadsheet를 조작하려면 항상 Spreadsheet 정보를 얻어와야 합니다.

getActiveSpreadsheet를 이용해 spreadsheet 객체를 얻어옵니다.

 

 

- spreadsheet.getRange('B2:D8').createFilter();

B2:D8 범위를 getRange를 통해 얻어옵니다.

createFilter method를 통해 해당 범위에 filter를 생성합니다.

 

 

Script를 실행한 결과 현재 Active sheet인 Sheet1의 B2:D8 범위에 filter가 생긴 것을 볼 수 있습니다.

 

 

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getRange('B2:D8').getFilter().remove();
}

위처럼 코드를 적어봅시다.

 

- spreadsheet.getRange('B2:D8').getFilter().remove();

getFilter() = B2:D8 범위에 걸린 Filter 정보를 얻어옵니다.

remove() = filter를 삭제합니다.

 

 

 

코드 실행 결과 걸렸던 필터가 삭제된걸 알 수 있죠.

 

 

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getActiveSheet().getFilter().remove();
}

filter의 해제는 굳이 filter범위를 명시하지 않고

getActiveSheet를 통해 현재 Active sheet 정보를 얻어오고

getFilter를 통해 Active sheet에 존재하는 Filter 정보를 얻어온다음

remove를 통해 filter를 모두 해제시킬 수 있습니다.

 

 

 

 

 

 

 

이제 필터를 조작해봅시다.

아래 코드는 C컬럼에서 a라는 값을 숨기는 filter 조작을 나타낸 코드입니다.

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getRange('B2:D8').createFilter();

  var filter_condition = SpreadsheetApp.newFilterCriteria().setHiddenValues(['a']);
  
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(3, filter_condition);
}

 

var filter_condition = SpreadsheetApp.newFilterCriteria().setHiddenValues(['a']);

filter 조작을 하려면 먼저 filter condition을 객체의 형태로 설정해야합니다.

newFilterCriteria() = 새로운 Filter Cirteria(조건)를 설정합니다.

setHiddenValues(['a']) = a라는 값을 숨기는 조건을 의미합니다.

 

 

- spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(3filter_condition);

spreadsheet.getActiveSheet() = spreadsheet에서 active된 sheet의 정보를 불러옵니다.

getFilter() = active spreadsheet에 존해자는 filter정보를 불러옵니다.

setColumnFilterCriteria(3, filter_condition) = Filter 조건을 설정합니다. 3은 C컬럼을 의미합니다. filter_condition은 위에서 설정한 filter criteria의 조건 객체입니다.

 

여기서 주의할건 setColumnFilterCriteria에서 숫자 3의 의미는 C컬럼을 의미한다고 했습니다.

이것은 1 = A, 2 = B, 3 = C, 4 = D 등 컬럼을 숫자로 치환한것입니다.

filter가 걸린 범위가 B2:D8이라고 해서 이 범위 안에서의 세 번째 컬럼인 D 컬럼을 의미하는 것이 아니라는 내용을 알아둡시다.

 

 

 

 

위 코드를 실행한 결과입니다.

C컬럼에서 a값이 사라지도록 필터가 걸린 것을 알 수 있죠.

 

 

 

 

 

 

 

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getRange('B2:D8').createFilter();

  var filter_condition = SpreadsheetApp.newFilterCriteria().setHiddenValues(['a', 'c']);

  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(3, filter_condition);
}

위처럼 setHiddenValues에서 숨길 값을 list의 형태로 전달하면 여러 값을 동시에 숨길 수 있습니다.

아래 이미지처럼요.

 

 

 

 

 

 

 

이번엔 filter 속에서 정렬을 해봅시다.

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.getRange('B2:D8').createFilter();

  spreadsheet.getActiveSheet().getFilter().sort(4, true);
}

spreadsheet.getActiveSheet().getFilter().sort(4true);

getActiveSheet().getFilter() = 현재 active sheet에 존재하는 filter 정보를 얻어옵니다.

sort(4, true) = 4컬럼(= D컬럼) 기준으로 오름차순(true) 정렬합니다. (내림차순은 true 대신 false라고 적으면 됩니다.)

 

 

결과를 보면 D컬럼 기준으로 오름차순이 된 걸 알 수 있습니다.

 

 

 

 

 

 

 

728x90
반응형
Comments