27

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

谢谢您的帮助。

4

5 回答 5

46

根据文档,如果您使用的是新的 Google 表格,这就是您需要做的一切:

在文件 > 电子表格设置中将电子表格中的重新计算设置更改为“每分钟更改一次”。

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

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

=GoogleClock()

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

于 2014-04-08T12:31:35.073 回答
12

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

单符号刷新率(使用GoogleClock

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

=GoogleClock(GOOGLEFINANCE(symbol,"datadelay"))

例如,使用:

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

然后

=GoogleClock(GOOGLEFINANCE("GOOG","datadelay"))

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

=GoogleClock(15)

多符号刷新率(使用GoogleClock

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

=GoogleClock(MIN(dataDelayValuesNamedRange))

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

没有GoogleClock()

GoogleClock()功能在 2014 年被删除,并被用于刷新工作表的设置取代。目前,我已经确认替换设置仅在从桌面浏览器访问时才可在表格中使用,而不是移动应用程序(我正在使用 Google 的移动表格应用程序更新于 2016 年 3 月 14 日)。

(这部分答案基于谷歌文档帮助,部分内容来自谷歌文档帮助)

要更改“某些”Google 表格功能的更新频率:

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

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

  • 导入范围:30 分钟
  • ImportHtml、ImportFeed、ImportData、ImportXml:1 小时
  • 谷歌金融:2 分钟

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

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

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

于 2016-03-16T13:14:22.477 回答
7

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

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

这是您可以在 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;    
 });  
}

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

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

还有你的套装:)

于 2019-12-14T17:53:28.423 回答
3

在任何单元格中使用 now()。然后将该单元格用作函数中的“虚拟”参数。当 now() 每分钟更改一次时,公式会重新计算。示例: someFunction(a1,b1,c1) * (cell with now() / cell with now())

于 2018-09-04T19:42:50.940 回答
3

我在加密更新方面遇到了类似的问题。解决这个问题的一个笨拙的技巧是在单元格公式的末尾包含一个“+ now() - now()”特技,上面的设置每分钟重新计算一次。这适用于我的价格更新,但绝对是一个丑陋的黑客。

于 2018-01-22T06:59:38.737 回答