본문 바로가기
GAS/[CAS_손코딩]

[GAS] 영역처리하기 [ ARRAY _ OBJECT ]

by 일등미노왕국 2023. 11. 2.

 

 

이런식의 데이터가 있을 때,

VBA 기준으로 

[B4].CURRENTREGION

 

코드를 입력하게 되면 영역이 [B4:E] E열의 끝까지 영역이 잡힌다. 물론 C열과 D열이 분리되어 있다면 문제가 없겠지만 저렇게 붙어 있을 때 [B4:C] 의 데이터의 끝 영역만 알고자 할때 쓰는 코드를 정리하려고 한다.

 

 

1. [B4] 와 연결된 모든 데이터를 배열에 담는 코드이다.

function getDataFromSpreadsheet() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let data = sheet.getRange("B4").getDataRegion().getValues(); 
  
  console.log(data)
  return data;
}

 

이런식으로 연결된 값이 2차원 배열에 출력되는 것을 볼 수 있다.

 

2. [B4]와 연결된 모든 데이터중 B열과 C열의 공백여부를 따져서 파싱하여 결과를 출력하는 코드이다.

function getDataFromSpreadsheet_A() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let data = sheet.getRange("B4").getDataRegion().getValues();
  
  let result = [];
  for (let i = 0; i < data.length; i++) {
   
    if (data[i][0] !== "" && data[i][1] !== "") {
      let item = data[i][0];
      let quantity = data[i][1];
      result.push([item, quantity]);
    }
  }
  console.log(result)
  return result;
}

 

빈 배열에 data값의 크기만큼 순환하면서 첫번째와 두번째의 데이터 존재여부를 따져서 각각을 변수에 담아서 result배열에 차곡차곡 쌓아서 마치 새로운 배열을 만드는 코드이다.

let result = [];
  for (let i = 0; i < data.length; i++) {
   
    if (data[i][0] !== "" && data[i][1] !== "") {
      let item = data[i][0];
      let quantity = data[i][1];
      result.push([item, quantity]);
    }
  }

 

아주 이쁘게 나온다.

 

3. 마지막은 [B4:C] 까지의 데이터를 가져오게 되면 값이 없는 C열의 끝값도 가져오게 되는데 그중 2번처럼 순환문이 아닌 filter와 map 함수를 통해서 원하는 값을 객체화하여  재 배열화 하는 코드이다.

 

 

function aaDataFromSpreadsheet_B() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let data = sheet.getRange("B4:C").getValues();
  
  let result = data.filter(row => row[0] !== "" && row[1] !== "")
  .map(row => ({ item: row[0], quantity: row[1] }));
  
  // 배열을 JSON 형태로 변환
  let jsonResult = JSON.stringify(result.slice(1));
  
  console.log(result);
  console.log(typeof result);
  console.log(jsonResult);
  console.log(typeof jsonResult);
   return jsonResult;
}

 

이쁘게 잘 나온다...많이 응용해보자...

댓글