2014-06-20 6 views
1

한 번 웹 사이트의 데이터를 자동으로 긁어 내려고합니다. Google 스프레드 시트에서 =ImportHTML() 함수를 사용하여 데이터 표를 가져온 다음 =query()으로 관련 데이터를 추출합니다. 이 함수는 스프레드 시트를 열 때마다 계산을 완료하는 데 10 ~ 30 초가 걸립니다.Google 스프레드 시트 : ImportHTML 완료 확인 스크립트

예약 된 Google Apps Script를 사용하여 매일 데이터를 다른 시트 (여기서는 저장되어 통계를 실행할 수 있음)에 복사합니다.

내 문제는 데이터를 복사하기 전에 스크립트가 완료 될 때까지 기다리는 데 문제가 있다는 것입니다. 결과는 내 스크립트가 오류 메시지 "N/A"만 복사한다는 것입니다.

나는 단지 Utilities.sleep(60000);을 추가하려고 시도했지만 작동하지 않았습니다.

계산을 완료하는지 확인하는 루프를 만들 수 있습니까? 나는 성공하지 않고 이것을 시도했다 :

function checkForError() { 
    var spreadsheet = SpreadsheetApp.getActive(); 
    var source = spreadsheet.getRange ("Today!A1"); 
    if (source = "N/A") { 
    Utilities.sleep(6000); 
    checkForError(); 
    } else { 
    moveValuesOnly(); 
    } 
} 

답변

1

잠금은 이것을위한 것이다. 문서에서 잠금 서비스를 찾습니다. 공용 잠금을 사용하십시오.

0

가 여기에 내가 내 비슷한 문제를 해결하기 위해 (내 자신의 체크 루프와 결합) 지그의 제안을 사용하는 방법은 다음과 같습니다이 나를 위해 환상적인 일했다

// Get lock for public shared resourse 
    var lock = LockService.getPublicLock(); 
    // Wait for up to 120 seconds for other processes to finish. 
    lock.waitLock(120000); 
    // Load my values below 
    // something like sheet.getRange("A1").setFormula('= etc... 
    // Now force script to wait until cell D55 set to false (0) before 
    // performing copy/pastes 
    var current = SpreadsheetApp.setActiveSheet(sheet.getSheets()[1]); 
    var ready = 1; 
    var count = 0; 
     while (true) { 
     // break out of function if D55 value has changed to zero or counter 
     // has hit 250 
     if (count >= 250) break; 

     // otherwise keep counting... 
    ready = current.getRange("D55").getValue(); 
     if (ready == 0) {count = 400;} 
      Utilities.sleep(100); 
        ++count; 
     } 
    // wait for spreadsheet to finish... sigh... 
    Utilities.sleep(200); 
    // Do my copy and pastes stuff here 
    // for example sheet.getRange("a1:b1").copyTo(sheet.getRange("a3"), {contentsOnly:true}); 
    // Key cells are updated so release the lock so that other processes can continue. 
    lock.releaseLock(); 
    // end script 
    return; 
} 

을, 내 작품을 망치고에서 구글의 산발적 인 서비스를 중지! Zig 님의 제안에 감사드립니다.

관련 문제