2015-10-17 143 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分钟或无论什么需要

相关问题