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

时间:2014-04-08 06:01:42

标签: google-apps-script google-sheets google-finance

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

感谢您的帮助。

5 个答案:

答案 0 :(得分:24)

如果您使用的是新版Google表格,则只需执行此操作according to the docs

  

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

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

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

=GoogleClock()

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

答案 1 :(得分:6)

如果您只想查找GOOGLEFINANCE功能的刷新率,请注意数据延迟最长可达20分钟(根据Google财经免责声明)。

单符号刷新率(使用GoogleClock

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

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

例如,使用:

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

然后

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

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

=GoogleClock(15)

多符号刷新率(使用GoogleClock

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

=GoogleClock(MIN(dataDelayValuesNamedRange))

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

没有GoogleClock()

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

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

改变一些"一些" Google表格功能更新:

  1. 打开电子表格。点击文件> 电子表格设置
  2. 在RECALCULATION部分,从下拉菜单中选择一个设置。
  3. 设置选项包括:
    • 改变
    • 变化,每分钟
    • 变化和每小时
  4. 点击保存设置
  5. 注意外部数据函数按以下时间间隔重新计算:

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

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

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

    到目前为止,我的理解是

    [*](我目前正在测试这个)

答案 2 :(得分:1)

我遇到类似加密更新的问题。解决这个问题的一个愚蠢的黑客是包括一个' + now() - now()'细胞公式末尾的特技表演,如上所述设置每分钟重新计算一次。这适用于我的价格更新,但绝对是一个丑陋的黑客。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

您可以使用其他来源来代替GOOGLEFINANCE。我正在使用此RealTime stock prices(我尝试了几次,但这是迄今为止最容易实现的方法。它们具有可检索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;    
 });  
}

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

  1. 转到项目触发器->单击“保存”图标旁边的“观看”图标
  2. 添加触发器
  3. 在->选择要运行的功能-> GetStocksPrice
  4. 在->选择事件源->时间驱动
  5. 在->选择基于时间的触发器的类型->分钟计时器
  6. 在->选择分钟间隔->每分钟

还有您的设置:)