【问题标题】:Script to refresh data with IMPORTHTML in Google Sheets在 Google 表格中使用 IMPORTHTML 刷新数据的脚本
【发布时间】:2019-11-14 10:36:37
【问题描述】:

我正在尝试从此处的表中获取有关 XAU 价格的数据:https://www.investing.com/currencies/xau-pln-historical-data

我需要在谷歌表格中有数据,问题是它不刷新数据。当我手动清理单元格并插入公式时,数据会被刷新,但是当我使用脚本执行它时它不起作用。我有这个脚本(基于https://support.geckoboard.com/hc/en-us/articles/206260188-Use-Google-Sheets-ImportHTML-function-to-display-data-in-Geckoboard):

function getData2() { 
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rank");
  var cellFunction = '=INDEX(IMPORTHTML("https://www.investing.com/currencies/xau-pln-historical-data","table",1),2,2)';
  var PricesRange = sheetName.getRange('K2:K14');
  PricesRange.clearContent();
  var queryString = Math.random();
  for (var j = 2; j <= 14; j++) {
    var cellFunction2 = '=INDEX(IMPORTHTML("https://www.investing.com/currencies/xau-pln-historical-data","table",1),' + j + ',2)';
    sheetName.getRange(j,11).setValue(cellFunction2);
  }
}

我设置了一个触发器,它每分钟运行一次脚本,但数据仍然相同。

你有什么想法吗?

【问题讨论】:

  • 您好汉娜,我的回答是否帮助您解决了您的问题?请告知,谢谢

标签: javascript google-apps-script google-sheets refresh


【解决方案1】:

一个更简单的解决方案是启用 1 次迭代的循环引用。例如放入单元格 A1 =A1+1 然后将您的网址附加到 "?"&amp;A1

【讨论】:

  • 什么是阈值?默认值为 0.05 - 我的公式是:=Dollar(Index(ImportHTML("apmex.com/silver-price","table",8),2,2)) 但它停留在“加载”中
  • 当 A1 只包含一个数字并且我在 URL 中附加了 &A1 时,它已经对我有用了。每当我更改数字时,都会重新加载 url 内容。
【解决方案2】:

您已经声明了queryString 变量,但您从未使用过它。拥有它的想法是将其附加到 URL,以便将其识别为不同的 URL(这可能会产生不同的结果)。这会导致公式的结果被刷新。

您可以使用下面使用queryString 变量的代码:

function getData2() { 
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rank");
  var PricesRange = sheetName.getRange('K2:K14');
  PricesRange.clearContent();
  var queryString = Math.random();
  for (var j = 2; j <= 14; j++) {
    var functionTemplate = '=INDEX(IMPORTHTML("https://www.investing.com/currencies/xau-pln-historical-data?%s","table",1),%s,2)';
    var cellFunction2 = Utilities.format(functionTemplate, queryString, j);
    sheetName.getRange(j,11).setValue(cellFunction2);
  }
}

此外,您可能有兴趣替换这个单一公式的 for 循环:

=QUERY(IMPORTHTML("https://www.investing.com/currencies/xau-pln-historical-data","table",1), "SELECT Col2 LIMIT 13 OFFSET 1", 0)

可以在您的代码中使用如下:

function getData2() { 
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rank");
  var PricesRange = sheetName.getRange('K2:K14');
  PricesRange.clearContent();
  var queryString = Math.random();

  var functionTemplate = '=QUERY(IMPORTHTML("https://www.investing.com/currencies/xau-pln-historical-data?%s","table",1), "SELECT Col2 LIMIT 13 OFFSET 1", 0)';
  var cellFunction2 = Utilities.format(functionTemplate, queryString);
  sheetName.getRange(2, 11).setValue(cellFunction2);
}

您还可以阅读有关Utilities.formatString 函数的更多信息,以备不时之需here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多