2014-07-09 2 views
0

Google Apps Script를 사용하여 모든 폴더 및 해당 ID의 목록을 검색하려고합니다. 현재, 결과를 배열에 쓰고 있는데,이 배열은 스프레드 시트에 5000 개 레코드마다 게시됩니다. 불행히도 스크립트는 완료 전에 실행 제한 (5 분)에 도달합니다. 이 문제를 어떻게 해결할 수 있습니까? 그리고 Apps Script를 사용하는 것보다 HTTP를 통해 RESTful API 호출을 더 성공적으로 수행 할 수 있습니까?실행 한계에 도달하지 않고 모든 폴더 이름과 ID를 반환하려면 어떻게해야합니까?

나는 다음과 같은 언급했습니다

  1. 코드는 이미 구글의 대부분을 씁니다 다음 가장 좋은 방법입니다.
  2. 느린 실행은 Apps 스크립트 색인 생성의 결과로 느리게 실행됩니다.
  3. 결과가 일관된 색인 패턴을 따르는 것으로 나타납니다.
    • 다중 실행은 같은 순서로 결과를 항목 인덱싱 방법은
  4. 는 드라이브 캐싱으로 보았다 확인되지 않는
  5. 델타 신뢰할 수 없습니다 실행 사이의 의미있는 캐싱을 방지 첨가 하였을 때 다시 색인 방법
  6. 알을 생산하고 있습니다.
    • 가 여전히 FolderIterator 객체를 통해 루프에 필요한에게
    • 이론적 인 성능은 더 악화 IMO 것

코드는 다음과 같습니다 (맞습니까?) :

function LogAllFolders() { 
    var ss_index = 1; 
    var idx = 0; 
    var folder; 
    var data = new Array(5000); 
    for (i=0;i<5000;i++){ 
    data[i] = new Array(2); 
    } 
    var ss = SpreadsheetApp.create("FolderInv2",1,2).getSheets()[0]; 
    var root = DriveApp.getFolders(); 
    while(root.hasNext()) { 
    folder = root.next(); 
    data[idx][0] = folder.getName(); 
    data[idx][1] = folder.getId(); 
    idx++; 
    if ((ss_index % 5000) == 0) { 
     ss.insertRowsAfter(ss.getLastRow()+1, 5000); 
     ss.getRange(ss.getLastRow()+1,1,5000,2).setValues(data); 
     SpreadsheetApp.flush(); 
     idx = 0; 
    } 
    ss_index++; 
    } 
} 
+1

드라이브 목록의 페이징 기능을보고 시간 기반 트리거와 결합하십시오 –

답변

0

내가 먼저 수집하는 것 먼저 처리하고자하는 폴더 ID를 입력 한 다음 처리 한 폴더 ID (또는 배열 색인)를 프로젝트 속성에 저장 한 다음 ru n 5 분마다 CRON으로 작업하고 이전에 저장 한 폴더 ID 또는 색인에서 재개하십시오.

완료되면 프로그래밍 방식으로 CRON 트리거를 제거하십시오.

관련 문제