我的谷歌电子表格正在使用GOOGLEFINANCE('symbol','price)
功能来检索我的投资组合的股票价格。不幸的是,我现在必须手动刷新。如何让电子表格每1分钟刷新一次?
感谢您的帮助。
答案 0 :(得分:24)
如果您使用的是新版Google表格,则只需执行此操作according to the docs:
将您的重新计算设置更改为电子表格中的“更改时和每分钟”文件>电子表格设置。
这将使服务器端的整个工作表自动更新每分钟,无论您是否在浏览器中显示电子表格。
如果您使用旧的Google表格,则需要添加具有此公式的单元格以实现相同的功能:
=GoogleClock()
编辑以包含新旧Google表格并更改为=GoogleClock()
。
答案 1 :(得分:6)
如果您只想查找GOOGLEFINANCE
功能的刷新率,请注意数据延迟最长可达20分钟(根据Google财经免责声明)。
GoogleClock
)以下是刷新操作的修改版本,考虑了数据延迟,以节省非生产性刷新周期。
=GoogleClock(GOOGLEFINANCE(symbol,"datadelay"))
例如,使用:
然后
=GoogleClock(GOOGLEFINANCE("GOOG","datadelay"))
导致基于动态数据的刷新率:
=GoogleClock(15)
GoogleClock
)如果您的工作表包含多行符号,则可以为每个符号添加datadelay
列并使用最低值,例如:
=GoogleClock(MIN(dataDelayValuesNamedRange))
其中dataDelayValuesNamedRange
是包含每个符号的数据延迟值的单元格范围的绝对引用或命名引用(假设这些值不同)。
GoogleClock()
2014年删除了GoogleClock()
功能,并替换了刷新工作表的设置设置。目前,我已确认替换设置仅在桌面浏览器中可用,而不是移动应用程序(我使用Google的移动工作表应用程序更新2016-03-14)。
(答案的这一部分基于,并从Google文档帮助中复制部分)
改变一些"一些" Google表格功能更新:
注意外部数据函数按以下时间间隔重新计算:
前面部分中对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;
});
}
现在,您需要添加一个每分钟执行一次的触发器。
还有您的设置:)