>source

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개의 새로운 행이 추가됩니다.
<테이블 클래스="s-테이블"> <머리> 아 나 C 디 이 F G ㅎ 나 제 케이 엘 남 N 오 P 질문 R S 티 유 V 여 <바디> 200001 [email protected] [email protected] 200001 [email protected] [email protected]

스프레드시트 #2(목적지)

  • 중복되지 않은 행을 포함합니다.
<테이블 클래스="s-테이블"> <머리> 아 나 C 디 <바디> 200001 [email protected] [email protected]

작업 스크립트(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]);
    }
  }
}

  • 이전 python : 파이썬에서 비주기 함수에서 주기 함수를 그리는 방법은 무엇입니까?
  • 다음 python : 스파크 데이터 프레임 파티션의 병렬 프로세스