입금 내역에서 8월 큐티 구매자 자동으로 체크해보기
오늘의 스터디
교회서 청년부 회계 일을 하는데.. 입금자 명단 비교하는게 귀찮아서.. 함수로 할 수도 있지만 더 난이도 있는 구분까지 해내고자.. 직접 스크립트를 짜보려고 합니다.
실제 사용 중인 출납부..
큐티 구매자랑 비교를 해보려면..
해당 월에 구매했는지를 알 수 있도록 날짜 정보,
'큐티'라는 특정 항목을 체크해야 하니까 계정 정보,
모자이크 처리했지만 구매량에 따라 입금액이 달라지니까 수입 정보,
마찬가지로 누군지를 비고에 표시했기에 비고 정보
이렇게 4가지 정보를 실제 구매자 명단이랑 자동으로 비교하면 될 것 같습니다.
날짜부터 시작합니다..
먼저 짠 코드 공유!
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('전체 출납부');
let data = sheet.getRange("b:b").getValues()
let start_date = new Date('2022/7/31')
let start_month = '8월'
let i
for(i=0; i<data.length; i++){
let compare_date = new Date(data[i][0])
if(compare_date.getTime()===start_date.getTime()){
break;
}
}
처음에는 전체 출납부에서 전체 정보를 다 긁어와서 돌릴까 했는데 생각보다 양이 너무 많아서 차라리 필요한 달의 정보만 가서 체크할 수 있도록 짜면 어떨까 생각이 들었습니다.
데이터 볼륨을 최소화 하여.. b열의 날짜 값들만 가져오고 8월 큐티 입금 받기 시작한 날인 '2022/7/31'을 start_date로 정의합니다.
start_month는 그냥 8월 큐티 신청을 할거고.. 큐티 신청 시트에는 해당 월을 8월이라고만 해놔서 저렇게 일단 적어만 둡니다.
그리고선 전체 날짜 데이터 중에서 처음으로 7/31이 나오면 바로 반복문을 멈춰줍니다.
이렇게 하는 이유는 위에서 데이터 범위를 "b:b"처럼 만들듯.. 처음 나온 그 지점을 시작점으로 해서 데이터가 있는 끝점까지의 데이터만 뽑아서 보려고 함입니다.
그 다음 코드!
let start_point = 'b'+(i+1)
let destination = sheet.getRange('b5').getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow()
let end_point = 'h'+destination
let new_range = start_point + ':' + end_point
let data_need_checking = sheet.getRange(new_range).getValues()
//Logger.log(data_need_checking)
아까 7/31이 처음 나오는 데이터의 i값이 있을텐데 i는 0부터 시작했기 때문에 1을 더해줍니다.
그리고 그 값을 b와 합쳐줘서 start_point라고 이름 붙였습니다.
destination은 아래 사진과 같이 b열의 마지막 데이터 값이 있는 위치를 체크하기 위해 명명한 값입니다.
엑셀에서도 자주 사용하는 특정 클릭한 후에 단축키(갑자기 기억 안나네요../ 스프레드 시트 기준으로는 ctrl + ↓)로 맨 아래 값이 있는 곳까지 가는 역할을 해줍니다.
저는 h열에 있는 데이터까지 보고 싶었어서 end_point라고 이름 붙이고 h에 destination값을 붙여서 끝값을 만들었습니다.
엑셀이나 스프레드 시트 자주 쓰시는 분들은 뭘 하려는지 아시겠지만.. 간단히 설명하면 아래와 같이 범위를 만들어주려고 했습니다.
제가 보고 싶은 7/31 시작하는 지점부터 그 이후 마지막 기입된 데이터까지를 전부 범위로 잡았다고 보시면 됩니다.
data_need_checking에 들어간 값은 그 특정 범위 내에 있는 날짜, 계정, 적요 ...... 비고까지의 정보가 다 들어 있습니다.
이렇게 한번 가공을 해주고 나면 양이 훨씬 줄어들어서 아래와 같이 이제 직접 원하는 값을 찾아봅니다.
let buyer_info = []
let j
for(j=0;j<data_need_checking.length;j++){
if(data_need_checking[j][1]==='큐티'){
buyer_info.push([data_need_checking[j][3],data_need_checking[j][6]])
}
}
Logger.log(buyer_info)
buyer_info라는 배열을 만들어두고 큐티를 포함하고 있는 행의 값 중 제가 보고 싶은 금액과 이름만 받아봅니다.
그리고 마지막에 buyer_info를 출력해봄으로써 결과가 어케 나왔는지도 확인해봤습니다.
오늘은 여기까지 작업해봤습니다.. 가능한 빨리 또 다시 이어서 작업해보겠습니다.
오늘의 배운 점
자바스크립트 날짜 비교하기
https://www.delftstack.com/ko/howto/javascript/how-to-compare-two-dates-with-javascript/
JavaScript에서 두 날짜를 비교하는 방법
이 기사는 JavaScript에서 두 날짜를 비교하는 다양한 방법을 보여줍니다.
www.delftstack.com
날짜끼리 등호로 비교를 십분 정도? 비교하다가 계속 false만 나와서.. 찾아보니 날짜는 바로 비교가 안되고.. 여러가지 다른 방법으로 비교를 해야 하더라구요.. 하나 배웠습니다. 이번에는 그래서 getTime()을 사용했습니다.
'스터디 다이어리 > 하루하루 기록' 카테고리의 다른 글
오늘의 공부 복기! 파이썬 (0) | 2022.08.01 |
---|