【问题标题】:Refresh ImportHTML刷新 ImportHTML
【发布时间】:2015-11-11 02:56:07
【问题描述】:

我有一张使用 ImportHTML 导入数据的工作表。数据变化很频繁,有没有办法让谷歌表格自动刷新数据?

我尝试将& year(now()) & month(now()) & day(now()) & hour(now()) & minute(now()), 添加到公式中,但出现以下错误:

此函数不允许使用 NOW()、RAND() 或 RANDBETWEEN() 引用单元格

【问题讨论】:

    标签: google-sheets google-docs


    【解决方案1】:

    “任何方式”?是的,但正如 Mogsdad 之前提到的“围绕这些部分”,“自从 GOOGLECLOCK 功能停用以来,没有公式会触发自动重新计算。”

    使用 Google Apps 脚本和类似...

    function getData() {
      var queryString = Utilities.formatDate(new Date(), "GMT", "yyyyMMddHHmmss");
      var cellFunction = '=IMPORTHTML("<your-url>?' + queryString + '","<your-query>",<your-index>)';
    
      SpreadsheetApp.getActiveSpreadsheet().getSheetByName("<your-sheet>").getRange('<your-cell>').setValue(cellFunction);
    }
    

    ...应该可以带你到那里。保存、命名和授权脚本后,设置一个触发器,以便它根据您的需要频繁地运行/刷新数据。

    【讨论】:

      【解决方案2】:

      这个问题很晚了。我最近不得不做类似的事情。我想我会在这里写一些东西让其他人发现有用..希望。

      我的用例:
      我希望我的 google 表格每隔几分钟在特定 url 上调用 IMPORTDATA,因为针对该 url 存储的数据正在被一个 Timer Trigger 和一个 Http Trigger Azure Function 更改。
      基本上,我希望我的 google 表格每 5 分钟刷新一次,因为我知道针对 url 的数据会不断变化。

      我尝试了什么:
      我开始使用与@greg 所暗示的类似的脚本。 (为此欢呼。) 我将该脚本的计时器触发器设置为 5 分钟。所有人看起来都很笨拙。

      问题:
      我意识到将函数设置为单元格上的值会导致函数仅在工作表为空时开始运行。第二次触发触发时,工作表没有刷新。 所以我尝试了

      cell.setValue("");
      cell.setValue('=IMPORTDATA("my-url")');
      

      运气不好。 工作表没有用新数据刷新。似乎工作表看到单元格中要设置的值与现有值相同,因此它没有费心重新运行该函数。

      为了证实我的假设,
      我手动尝试了:

      1. 从谷歌表格单元格中删除 IMPORTDATA 函数。
      2. 将值粘贴回单元格中。

      工作表没有刷新。

      但是当我手动尝试时:

      1. 从/在单元格中删除/更改 URL。按 Enter。
      2. 在单元格中再次粘贴公式。按 Enter。

      这行得通。所以,似乎cell.SetValue() 甚至cell.setFormula() 只是没有重新运行我设置的函数,因为相同的函数存在于单元格中。

      我的解决方案最适合我的用例:
      由于我指向的 url 的数据已经是 CSV 格式, 我做了这样的事情:

        var firstSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
        var text = UrlFetchApp.fetch(url).getContentText();   //gets the data.
        var csv = Utilities.parseCsv(text);                   //parses the data.
        var range = firstSheet.getRange(1, 1, csv.length, 17) //getting the range.
        range.setValues(csv);                                 //setting the data.
      

      我基本上是从 url 中获取数据并将其放入计时器中的工作表中,而不是调用 IMPORTDATA 函数,因为这种方法对我来说不太奏效。

      您可以做类似的事情,假设您想要获取某种表格或图表内容并将值保存到您的工作表中。

      【讨论】:

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