본문 바로가기

컴퓨터 활용/구글스프레드시트 응용

구글 스프레드 시트에서 체크박스 다루기 5 - 검색 후 체크박스 선택

여러개의 체크박스를 검색하여 일괄체크 하는 예제 입니다.

  1. 체크박스 검색선택 : 입력 받은 문자열이 B 열에 있으면 체크합니다.
  2. 체크박스 검색해제 : 체크된 상태에서 특정 문자열이 있으면 체크 해제 합니다.
// 문자열 검색하여 체크하기 
function searchChecked() 
{
  var sheet = SpreadsheetApp.getActive().getSheetByName("검색체크하기"); 

  // 질문 창 만들기 
  var ui = SpreadsheetApp.getUi();
  var result = ui.prompt("검색할 문자열 입력");

  // 받은 질문은 findword 로 들어감 
  var button = result.getSelectedButton();
  if (button === ui.Button.OK) {
    var findword = result.getResponseText();
  } 
  else if (button === ui.Button.CLOSE)  return;
  
  // sheet에서 데이터가 있는 테이블을 2차원 배열(values)로 만듬 
  var checkRange= sheet.getDataRange()
  var values = checkRange.getValues();

  // 배열을 루프를 둘립니다.
  for(var i = 1 ; i < values.length; i++)
  {
    // 종목명(values[i][1])에 findword 가 시작되는 열이 있음
    if(values[i][1].indexOf(findword) !=-1)
      values[i][0] = true; // 체크 합니다. 
    else
      values[i][0] = false; // 아니면 체크해제
  }

  // 2차원 배열을 checkRange 에 다시 설정 
  checkRange.setValues(values);
}

질문 창을 만드는 방법으로  SpreadsheetApp.getUI() 의 ui.prompt 를 이용 
var result = ui.prompt("검색할 문자열 입력");
result.getResponseText() 읽어들여  변수 findword에 넣습니다.  

getDataRange() 로 데이터가 들어 있는 테이블을 2차원 배열인 values 로 넣고 루프를 돌립니다.
values[1][0] 는 2행 1열,  values[2][1]  3행 2열 이 됩니다.
1 부터 돌리는 이유는 1행은 0 인데 테이블 헤더가 위치되어 있기 때문입니다. 실제 데이터는 1행 부터 시작합니다.
돌리면서    if(values[i][1].indexOf(findword) !=-1)   2행에 종목명인데 indexOf 명령어로 findword 문자열이 포함되어 있으면 value[i][0] = true 로 체크 합니다. 

다음 소스는 Uncheck 함수 입니다. 체크되어 있는 상태에서 특정 문자열이 있는 행의 체크박스를 해제합니다.
체크함수와 동일하나 체크하는 부분을 제외하는 부분이 다릅니다. 

// 선택된 상태에서 검색된 문자열이 포함된 체크박스해제 
function searchUnChecked(e) 
{
  var sheet = SpreadsheetApp.getActive().getSheetByName("검색체크하기"); // 이벤트 시 삭제
  var ui = SpreadsheetApp.getUi();
  var result = ui.prompt("체크해제할 문자열 입력");

  var button = result.getSelectedButton();
  if (button === ui.Button.OK) {
    var findword = result.getResponseText();
  } else if (button === ui.Button.CLOSE) 
  {
    return;
  }

  var checkRange= sheet.getDataRange()
  var values = checkRange.getValues();

  for(var i = 1 ; i < values.length; i++)
  {
    if(values[i][1].indexOf(findword) !=-1)
      values[i][0] = false; // 해제 이므로 false 값 설정
    // else values[i][0] = true; // 
  }

  checkRange.setValues(values);
}

예제는 다음 시트에 있습니다. 

https://docs.google.com/spreadsheets/d/1MbsSABTjB1bvNUXTC8Ur5EJY65YkJSwRa0GMN2JDxIE/edit#gid=2141081109

 

체크박스 다루기

체크박스구현 종목명,종목코드,현재가,등락률,전일대비,전일주가,거래량,시장정보,기준일시,수집일시 현대차,005380 삼성전자,005930 현대중공업,009540 카카오,035720 LG화학,051910 TIGER 200,102110 KODEX 철

docs.google.com