본문 바로가기
잡담 & 시사이슈 등

구글 스프레드시트 Apps Script 원하는 범위내 문자열 찾아 데이터 뿌리기

by IT매니절 2024. 8. 14.

 

원하는 기능의 엑셀 함수를 찾아 헤맸지만

vlookup의 경우 데이터를 찾고, 하나의 컬럼 데이터만을 뿌려주기에 적합하지 않았다

 

결국 VBA에 손댈 수 밖에 없다는 결론이 생겨 대충 FOR문을 돌렸다

자바스크립트라지만, Apps Script는 완전히 처음이라 헤맸다

검색해서 나온 코드를 그대로 붙여넣어도 원하는 결과가 나오지 않거나, 그 사이 업데이트가 되었는지 없는 함수라고 뜨기 일쑤였다.

 

어찌저찌 되긴 했다

 


const NowSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 0번째 시트 정보를 가지고 온다
// 보통 검색기능을 이용한다면 0번째 시트에서 시작하기 때문.

  let selectedCell="";
  let findSheet=null;
  // 0번째 시트는 검색기능이 들어가므로, 데이터는 1번째 시트부터 시작
  for (let i = 1; i < 9; i++){
    const ISheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[i];
    
    const range= ISheet.getRange("A3:A50");  //데이터영역
    const textFinder = range.createTextFinder(NowSheet.getRange("A3").getValue());  //검색어 넣고
    const findNow = textFinder.matchEntireCell(false).matchCase(false).findAll();

    if(findNow.length > 0) {
      findNow.forEach(rg => {
        selectedSh = rg.getA1Notation().substring(0,1);
        selectedCell = rg.getRowIndex();
        findSheet = ISheet;
        return false;
      })
      break;
    }
  }

findSheet.getRange("B"+selectedCell+":F"+selectedCell).copyTo(NowSheet.getRange(6, 1));
// 복사할 시트.getRange("여기:저기").copyTo(결과를 보여줄 시트.getRange(뿌려줄 행, 뿌려줄 열));

 

 

textFinder를 사용할때 원래는 getCurrentMatch()를 썼었다

 

https://developers.google.com/apps-script/reference/spreadsheet/text-finder?hl=ko#getCurrentMatch()

getCurrentMatch()   Range   검색 기준과 일치하는 현재 셀을 반환합니다.

 

이렇게 적혀 있었으니까... 하지만 아무리 console.log를 찍어봐도 null값이 떴다

결국 findAll()로 forEach를 돌려서 찾기로 하였음

내 경우 데이터 영역이 작아 중복데이터는 없어서 제대로 나오는 것일뿐, 중복데이터가 있다면 손봐야 할 코드이다

 

matchEntireCell(false).matchCase(false)

textfinder에 쓰인 함수들인데 

 

matchEntireCell는 셀의 전체 내용과 일치하는지 유무를,
matchCase는 셀 텍스트의 대소문자가 일치하는지 유무를 설정한다

 

 

 

 

참고한 블로그

https://www.autooffice.co.kr/blog/2023/08/11/copying-data-between-sheets-in-apps-script/

https://www.autooffice.io/knowhow/write-formula-to-selected-cell-or-range

https://smart-worker.tistory.com/39

 

'잡담 & 시사이슈 등' 카테고리의 다른 글

XZ Utils Backdoor  (0) 2024.11.10
Rocky-BaseOS.repo  (0) 2024.10.19
최근 보안뉴스  (0) 2024.10.13
Rust 취약점 이슈  (0) 2024.05.12