Как заставить электронную таблицу google обновляться каждую минуту?

Моя электронная таблица Google использует функцию GOOGLEFINANCE('symbol','price) для получения цен на акции моего портфеля. К сожалению, сейчас мне приходится обновляться вручную. Как сделать так, чтобы таблица обновлялась каждую минуту?

Спасибо за помощь.


person user781486    schedule 08.04.2014    source источник


Ответы (5)


Если вы используете новые таблицы Google, это все, что вам нужно сделать, согласно в документы:

измените настройку пересчета на «При изменении и каждую минуту» в электронной таблице, выбрав «Файл»> «Настройки таблицы».

Это заставит весь лист обновляться каждую минуту на стороне сервера, независимо от того, открыта ли таблица в вашем браузере или нет.

Если вы используете старые Google Таблицы, вам нужно добавить ячейку с этой формулой для достижения той же функциональности:

=GoogleClock()

ИЗМЕНИТЬ, чтобы включить старые и новые Google Таблицы и изменить на =GoogleClock().

person rickcnagy    schedule 08.04.2014
comment
@rickcnagy Я не знаю, работает ли это по-прежнему как при изменении, и каждая минута, похоже, обновляет только формулы NOW (), TODAY (), RAND () и RANDBETWEEN (), а не весь рабочий лист - person LuisF; 27.01.2018
comment
как я могу использовать now? просто вставить в ячейку =now()? это обновит весь лист? - person seralouk; 09.04.2021

Если вы ищете частоту обновления только для функции GOOGLEFINANCE, имейте в виду, что задержка данных может составлять до 20 минут (согласно Заявлению об отказе от ответственности Google Finance).

Частота обновления одного символа (с использованием GoogleClock)

Вот модифицированная версия действия обновления, учитывающая задержку данных, чтобы сэкономить на непродуктивных циклах обновления.

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

Например, с:

  • СИМВОЛ: GOOG
  • ЗАДЕРЖКА ДАННЫХ: 15 (минут)

тогда

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

Приводит к динамической частоте обновления на основе данных:

=GoogleClock(15)

Частота обновления нескольких символов (с использованием GoogleClock)

Если ваш лист содержит несколько строк символов, вы можете добавить столбец datadelay для каждого символа и использовать наименьшее значение, например:

=GoogleClock(MIN(dataDelayValuesNamedRange))

Где dataDelayValuesNamedRange - абсолютная ссылка или именованная ссылка диапазона ячеек, содержащих значения задержки данных для каждого символа (при условии, что эти значения различны).

Без GoogleClock()

Функция GoogleClock() была удалена в 2014 году и заменена настройкой настроек для обновления листов. В настоящее время я подтвердил, что параметры замены доступны только в Таблицах при доступе из настольного браузера, а не из мобильного приложения (я использую мобильное приложение Google Таблицы, обновленное 14 марта 2016 г.).

(Эта часть ответа основана на справке Документов Google и частично скопирована из нее)

Чтобы изменить частоту обновления "некоторых" функций Google Таблиц:

  1. Откройте электронную таблицу. Нажмите Файл> Настройки таблицы.
  2. В разделе ПЕРЕСЧЕТ выберите настройку в раскрывающемся меню.
  3. Setting options are:
    • On change
    • При изменении и каждую минуту
    • При смене и каждый час
  4. Нажмите СОХРАНИТЬ НАСТРОЙКИ.

ПРИМЕЧАНИЕ. Функции внешних данных пересчитываются через следующие интервалы:

  • ImportRange: 30 минут
  • ImportHtml, ImportFeed, ImportData, ImportXml: 1 час.
  • GoogleFinance: 2 минуты

Ссылки в предыдущих разделах на отображение и использование атрибута datadelay по-прежнему применимы, как и концепции для более эффективного кодирования листов.

Положительным моментом является то, что новая опция обновления продолжает обновляться серверами Google независимо от того, загружен ли у вас лист или нет. Это, безусловно, положительный момент для общих листов; тем более для скриптов Google Apps (GAS), где GAS используется в коде рабочего процесса или ссылочные данные используются в качестве триггера для события.

[*] в моем понимании (сейчас я это тестирую)

person Derek Abrams    schedule 16.03.2016
comment
GoogleClock устарел в 2014 году. Вы уверены, что это работает? - person Mogsdad; 16.03.2016
comment
Спасибо Могсдаду, я тоже это обнаружил. Я пропустил этот момент в исходном ответе. - person Derek Abrams; 16.03.2016

GOOGLEFINANCE может иметь задержку в 20 минут, поэтому обновление каждую минуту не поможет.

Вместо GOOGLEFINANCE вы можете использовать другой источник. Я использую эту котировки акций в реальном времени (я пробовал пару, но это, безусловно, самый простой для реализации. У них есть API, которые возвращают 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. Перейдите в раздел "Триггеры проекта" - ›щелкните значок" Наблюдать "рядом со значком" Сохранить ".
  2. Добавить триггер
  3. В - ›Выберите, какую функцию запустить -› GetStocksPrice
  4. В - ›Выбрать источник события -› Управляемый временем
  5. In - ›Выбрать тип триггера по времени -› Минутный таймер
  6. В - ›Выбрать минутный интервал -› Каждую минуту

И твой набор :)

person Universe68    schedule 14.12.2019
comment
Как бы вы изменили это так, чтобы оно сохраняло (тикер, цену) в каждой строке? в настоящее время это только экономит цену - person mchangun; 26.03.2020
comment
@mchangun вы хотите, чтобы (тикер, цена) в той же ячейке или в другой? (пример: тикер H1, цена H2) - person Universe68; 28.03.2020
comment
Другая ячейка, слева от цены. Спасибо! - person mchangun; 28.03.2020

У меня была аналогичная проблема с криптографическими обновлениями. Неуклюжий прием, позволяющий обойти это, - включить трюк «+ now () - now ()» в конце формулы ячейки с настройкой, как указано выше, для пересчета каждую минуту. Это сработало для моих обновлений цен, но определенно уродливое решение.

person Mike Pitman    schedule 22.01.2018
comment
Я пытаюсь сделать то же самое с формулой IMPORTDATA, но, похоже, невозможно использовать формулу NOW () в первой формуле. Как тебе это удалось? - person LuisF; 27.01.2018
comment
Я тоже пытаюсь, но безуспешно! - person neo269; 12.03.2018

используйте now () в любой ячейке. затем используйте эту ячейку как «фиктивный» параметр в функции. когда now () меняется каждую минуту, формула пересчитывается. пример: someFunction (a1, b1, c1) * (ячейка с now () / ячейка с now ())

person Paulino Seoane    schedule 04.09.2018