Google App Scripts를 사용하여 스프레드시트 #1에서 스프레드시트 #2로 데이터를 가져오고 있습니다. 그러나 "최대 실행 시간 초과" 오류가 발생합니다. 내가 뭘 잘못하고 있죠? code를 최적화하는 더 좋은 방법이 있습니까?
스크립트 로직
- 직원 ID가 포함된 스프레드시트 #1의 열 B에 대해 배열 #1 생성
- 이미 가져온 직원 ID가 포함된 스프레드시트 #2의 열 A에 대해 배열 #2를 만듭니다.
- 배열 #1에 배열 #2에 없는 ID가 포함된 경우 스프레드시트 #2에 ID, email1 및 email2 열이 있는 새 행을 추가합니다.
스프레드시트 #1(출처)
- 행에 중복 데이터를 포함합니다.
- 현재 50,000개의 행이 있으며 매일 100개의 새로운 행이 추가됩니다.
스프레드시트 #2(목적지)
- 중복되지 않은 행을 포함합니다.
작업 스크립트(5,000행 미만의 데이터용).
//Source sheet settings
let sourceSheetId= '1qW5UDn0O*******************';
let sourceTab= 'Source';
let sourceColumn= 2;
let sourceEmail1Column= 20;
let sourceEmail2Column= 19;
//Destination sheet settings
let destinationTab= 'Destination';
let destinationColumn= 1;
let destinationEmail1Column= 2;
let destinationEmail2Column= 4;
function newEmployeeIds() {
let ss= SpreadsheetApp.getActiveSpreadsheet();
let destinationSheet= ss.getSheetByName(destinationTab);
let sourceSS= SpreadsheetApp.openById(sourceSheetId);
let sourceSheet= sourceSS.getSheetByName(sourceTab);
let existingIdsArray= destinationSheet.getRange(2,destinationColumn,destinationSheet.getLastRow()-1,1).getValues();
let existingIds= existingIdsArray.flat();
let sourceIdArray= sourceSheet.getRange(2,sourceColumn,sourceSheet.getLastRow()-1,1).getValues();
let sourceIds= [...new Set(sourceIdArray.flat())];
let email1Array= sourceSheet.getRange(2,sourceEmail1Column,sourceSheet.getLastRow()-1,1).getValues();
let email2Array= sourceSheet.getRange(2,sourceEmail1Column,sourceSheet.getLastRow()-1,1).getValues();
for (i=0;i<sourceIds.length;i++){
if (existingIds.indexOf(sourceIds[i])== -1){
let newRow= destinationSheet.getLastRow()+1;
destinationSheet.getRange(newRow,destinationColumn).setValue(sourceIds[i]);
let index= sourceIdArray.flat().indexOf(sourceIds[i]);
destinationSheet.getRange(newRow,destinationEmail1Column).setValue(email1Array[index][0]);
destinationSheet.getRange(newRow,destinationEmail2Column).setValue(email2Array[index][0]);
}
}
}