簡體   English   中英

如何讓谷歌電子表格每 1 分鍾刷新一次?

[英]How to make google spreadsheet refresh itself every 1 minute?

我的谷歌電子表格正在使用GOOGLEFINANCE('symbol','price)函數來檢索我的投資組合的股票價格。 不幸的是,我現在必須手動刷新。 如何讓電子表格每 1 分鍾刷新一次?

感謝您的幫助。

根據文檔,如果您使用的是新版 Google 表格,則只需執行以下操作:

在文件 > 電子表格設置中的電子表格中將重新計算設置更改為“每分鍾更改一次”。

這將使整個工作表每分鍾更新一次,在服務器端,無論您是否在瀏覽器中安裝了電子表格。

如果您使用的是舊版 Google 表格,則需要使用此公式添加一個單元格以實現相同的功能:

=GoogleClock()

編輯以包含新舊 Google 表格並更改為=GoogleClock()

如果您只是在尋找GOOGLEFINANCE功能的刷新率,請記住,數據延遲可能長達 20 分鍾(根據 Google 財經免責聲明)。

單符號刷新率(使用GoogleClock

這是刷新操作的修改版本,考慮了數據延遲,以節省非生產性的刷新周期。

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

例如,與:

  • 符號: GOOG
  • 數據延遲: 15(分鍾)

然后

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

導致基於動態數據的刷新率:

=GoogleClock(15)

多符號刷新率(使用GoogleClock

如果您的工作表包含多行符號,您可以為每個符號添加一個datadelay列並使用最小值,例如:

=GoogleClock(MIN(dataDelayValuesNamedRange))

其中dataDelayValuesNamedRange是包含每個符號的數據延遲值的單元格范圍的絕對引用或命名引用(假設這些值不同)。

沒有GoogleClock()

GoogleClock()函數在 2014 年被刪除,並替換為刷新工作表的設置設置。 目前,我已經確認替換設置僅在從桌面瀏覽器訪問時在表格中可用,而不是在移動應用程序中可用(我使用的是谷歌的移動表格應用程序,更新於 2016 年 3 月 14 日)。

(這部分答案基於 Google Docs Help,部分復制自 Google Docs Help)

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

  1. 打開電子表格。 單擊文件>電子表格設置
  2. 在重新計算部分,從下拉菜單中選擇一個設置。
  3. 設置選項有:
    • 更改時
    • 在變化和每一分鍾
    • 在變化和每小時
  4. 單擊保存設置

注意外部數據函數按以下時間間隔重新計算:

  • 導入范圍:30 分鍾
  • ImportHtml、ImportFeed、ImportData、ImportXml:1 小時
  • GoogleFinance:2 分鍾

前面部分中對datadelay屬性的顯示和使用的datadelay以及更有效的工作表編碼概念仍然適用。

積極的一面是,無論您是否加載了工作表,Google 服務器都會繼續刷新新的刷新選項。 這肯定對共享工作表有利; 對於 Google Apps Scripts (GAS) 更是如此,其中 GAS 用於工作流代碼或引用數據用作事件的觸發器。

[*] 到目前為止我的理解(我目前正在測試這個)

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;    
 });  
}

現在您需要添加一個每分鍾執行一次的觸發器。

  1. 轉到 Project Triggers -> 單擊 Save 圖標旁邊的 Watch 圖標
  2. 添加觸發器
  3. 在 -> 選擇要運行的函數 -> GetStocksPrice
  4. 在 -> 選擇事件源 -> 時間驅動
  5. 在 -> 選擇基於時間的觸發器類型 -> 分鍾計時器
  6. 在 -> 選擇分鍾間隔 -> 每分鍾

還有你的套裝:)

我在加密更新方面遇到了類似的問題。 解決這個問題的一個笨拙的技巧是在單元格公式的末尾包含一個 '+ now() - now()' 特技,使用上述設置每分鍾重新計算一次。 這適用於我的價格更新,但是,絕對是一個丑陋的黑客。

在任何單元格中使用 now()。 然后將該單元格用作函數中的“虛擬”參數。 當 now() 每分鍾改變時,公式會重新計算。 示例: someFunction(a1,b1,c1) * (帶有 now() 的單元格 / 帶有 now() 的單元格)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM