2015-10-17 369 views
0

我有一張表格,希望使用importxml函數導入Google搜索結果的值值。有時我會在單元格A2中獲得#N/A。如何使用Google表格解決#N/A值= importxml函數

我用while while循環不斷嘗試獲取數據,即使等待很長時間,我仍然無法獲取數據。是否有可能設置JavaScript定時器,直到我在單元格A2中獲得值,然後計時器停止並允許其餘代碼繼續?

我應該怎麼做才能避免這種情況,並始終獲得單元格A2的價值?任何替代方案?

var queryString = Math.random(); 

    var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")'; 
    SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1); 

    var stop = 0; 
    while (SpreadsheetApp.getActiveSheet().getRange('A2').getValue() === "#N/A" && stop++<10) { 
      Utilities.sleep(5000); 
      var queryString3 = Math.random(); 
      var cellFunction1 = '=IMPORTXML("' + SpreadsheetApp.getActiveSheet().getRange('C2').getValue() + '&randomNumber=' + queryString3 + '","'+ SpreadsheetApp.getActiveSheet().getRange('D2').getValue() + '")'; 
      SpreadsheetApp.getActiveSheet().getRange('A2').setValue(cellFunction1); 
     } 
+0

你在C2和D2有什麼? – Mogsdad

回答

1

我面臨同樣的問題。我懷疑這是因爲在單元格值從IMPORTXML更新之前,代碼嘗試從單元格獲取.getValue。

我的解決方法是編寫兩個單獨的函數,一個強制IMPORTXML刷新,然後另一個將數據寫入工作表。然後,我給IMPORTXML一個觸發器,每5分鐘運行一次,然後用自己的觸發器寫入函數。

你可能想試試這個:

function refresher() { 
    var ss = SpreadsheetApp.getActiveSheet(); 
    var sheet = ss.getSheetById("input"); 
    // Cell input!A2 holds the formula '=IMPORTXML(A1, XMLpath)' 
    //So now we give input!A1 a URL with a random ?number behind... 
    //...to force IMPORTXML to refresh 
    sheet.getRange(1, 1) 
    .setValue("http://www.urlWhereInfoResides.com/?" + Math.floor(Math.random() * 40)); 
} 

^給進修()觸發每5分鐘運行一次

function writer() { 
    var ss2 = SpreadsheetApp.getActiveSheet(); 
    //assumes desired value sits in cell input!A2 
    var input = ss2.getSheetById("input") 
    .getRange(2, 1) 
    .getValue(); 
    //adds input value into a new row in output sheet 
    var outputSheet = ss2.getSheetById("output"); 
    var output = outputSheet.getRange(outputSheet.getLastRow() + 1, 1) 
    .setValue(input); 
} 

^給作家()觸發每運行5分鐘或無論什麼需要

相關問題