如何让Google电子表格每1分钟刷新一次?

use*_*486 15 google-finance google-sheets google-apps-script

我的谷歌电子表格正在使用GOOGLEFINANCE('symbol','price)函数来检索我的投资组合的股票价格.不幸的是,我现在必须手动刷新.如何让电子表格每1分钟刷新一次?

谢谢您的帮助.

ric*_*agy 31

根据文档,如果你使用新版Google表格,这就是你需要做的全部工作:

在文件>电子表格设置中将电子表格中的重新计算设置更改为"在更改时分钟".

这将使整个工作表在服务器端每分钟更新一次,无论您是否在浏览器中都有电子表格.

如果您使用的是旧版Google表格,则需要添加具有此公式的单元格以实现相同的功能:

=GoogleClock()
Run Code Online (Sandbox Code Playgroud)

编辑以包含新旧Google表格并更改为=GoogleClock().

  • @rickcnagy 我不知道这是否仍然有效,因为“每次更改和每分钟”设置似乎只更新 NOW()、TODAY()、RAND() 和 RANDBETWEEN() 公式,而不是整个工作表 (9认同)
  • now()仅刷新该单元格还是刷新整个电子表格? (2认同)

Uni*_*e68 7

GOOGLEFINANCE 可能会有 20 分钟的延迟,因此每分钟刷新一次并没有真正的帮助。

您可以使用不同的来源代替 GOOGLEFINANCE。我正在使用这个实时股票价格(我尝试了几个,但这是迄今为止最容易实现的。他们有返回 JSON { Name: CurrentPrice } 的 API

这是您可以在 Google 表格中使用的小脚本(工具-> 脚本编辑器)

function GetStocksPrice() {      
   var url = 'https://financialmodelingprep.com/api/v3/stock/real-time- 
   price/AVP,BAC,CHK,CY,GE,GPRO,HIMX,IMGN,MFG,NIO,NMR,SSSS,UCTT,UMC,ZNGA';
   var response = UrlFetchApp.fetch(url);

   // convert json string to json object
   var jsonSignal = JSON.parse(response);    

  // define an array of all the object keys
  var headerRow = Object.keys(jsonSignal);
  // define an array of all the object values
  var values = headerRow.map(function(key){ return jsonSignal[key]});   
  var data = values[0];

  // get sheet by ID -  
  // you can get the sheet unqiue ID from the your current sheet url
  var jsonSheet = SpreadsheetApp.openById("Your Sheet UniqueID");  
  //var name = jsonSheet.getName();

  var sheet = jsonSheet.getSheetByName('Sheet1'); 

  // the column to put the data in -> Y
  var letter = "F";

  // start from line 
  var index = 4;
  data.forEach(function( row, index2 ) { 

     var keys = Object.keys(row);
     var value2 = row[keys[1]];            

     // set value loction
     var cellXY = letter +  index;      
     sheet.getRange(cellXY).setValue(value2);  
  
     index = index + 1;    
 });  
}
Run Code Online (Sandbox Code Playgroud)

现在您需要添加一个每分钟执行一次的触发器。

  1. 转到 Project Triggers -> 单击 Save 图标旁边的 Watch 图标
  2. 添加触发器
  3. 在 -> 选择要运行的函数 -> GetStocksPrice
  4. 在 -> 选择事件源 -> 时间驱动
  5. 在 -> 选择基于时间的触发器类型 -> 分钟计时器
  6. 在 -> 选择分钟间隔 -> 每分钟

还有你的套装:)


小智 6

如果您只是为该GOOGLEFINANCE功能寻找刷新率,请记住,数据延迟最长可达20分钟(根据Google财经免责声明).

单符号刷新率(使用GoogleClock)

以下是刷新操作的修改版本,考虑了数据延迟,以节省非生产性刷新周期.

=GoogleClock(GOOGLEFINANCE(symbol,"datadelay"))
Run Code Online (Sandbox Code Playgroud)

例如,用:

  • 符号: GOOG
  • 数据延迟: 15(分钟)

然后

=GoogleClock(GOOGLEFINANCE("GOOG","datadelay"))
Run Code Online (Sandbox Code Playgroud)

导致基于动态数据的刷新率:

=GoogleClock(15)
Run Code Online (Sandbox Code Playgroud)

多符号刷新率(使用GoogleClock)

如果工作表包含多行符号,则可datadelay以为每个符号添加一列并使用最低值,例如:

=GoogleClock(MIN(dataDelayValuesNamedRange))
Run Code Online (Sandbox Code Playgroud)

其中dataDelayValuesNamedRange是绝对参考或包含对于每个符号(假设这些值是不同的)中的数据的延迟值的单元格范围的命名参考.

没有 GoogleClock()

该GoogleClock()功能于2014年被删除,取而代之的是刷新工作表的设置设置.目前,我已经确认替换设置仅在桌面浏览器中可用,而不是移动应用程序(我使用Google的移动表格应用程序更新2016-03-14).

(答案的这部分内容基于Google文档帮助,并从中复制了部分内容)

要更改"某些"Google表格功能更新的频率,请执行以下操作:

  1. 打开电子表格.单击文件 > 电子表格设置.
  2. 在RECALCULATION部分,从下拉菜单中选择一个设置.
  3. 设置选项是:
    • 在改变
    • 在变化和每一分钟
    • 在变化和每小时
  4. 单击" 保存设置".

注意外部数据功能按以下间隔重新计算:

  • ImportRange:30分钟
  • ImportHtml,ImportFeed,ImportData,ImportXml:1小时
  • GoogleFinance:2分钟

前面部分中对datadelay属性的显示和使用的引用仍然适用,以及更有效编码工作表的概念.

从积极的方面来说,无论您是否加载了工作表,Google服务器都会继续刷新新的刷新选项.这肯定对共享表格有利; 对于Google Apps脚本(GAS)更是如此,其中GAS用于工作流代码或引用的数据用作事件的触发器.

[*]在我的理解中到目前为止(我目前正在测试这个)

  • GoogleClock 已于 2014 年弃用。您确定这有效吗? (2认同)