Google Sheets (Google Finance) - узнайте стоимость акций и отслеживайте - PullRequest
1 голос
/ 29 января 2020

Я хотел бы, чтобы при вводе данных в новую строку (из внешнего листа - дата, время, тикер акций) использовать Google Finance, чтобы получить текущую цену акции в ячейку, а затем больше не обновлять цену. в этой камере. В ячейке рядом с ней я хочу отслеживать цену, а в ячейке рядом с ней я хочу отслеживать максимум с момента создания (наибольшее значение ячейки «текущей цены»).

Здесь это мой лист https://docs.google.com/spreadsheets/d/1EUU1bZnIfBatNI8H9pPk202PCD1g8wWXt5M0wx6S-jM/edit?usp=sharing

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

Таким образом, в итоге, дата и время будут введены в столбец AB и C. Когда это произойдет, я хочу получить текущую цену акции в C и больше не обновлять этот номер. В D я хочу, чтобы цена отслеживалась, как обычно работает Google Finance, а в E - самое высокое значение D в той же строке.

Это цель. Любая помощь будет очень ценится:)

1 Ответ

1 голос
/ 29 января 2020

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

Код, связанный с вашей электронной таблицей:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("D2:E2");
  var values = range.getValues()[0];
  range.setValues([[values[0], Math.max(values[0], values[1])]]);
}

Что делает этот код?

  • Он устанавливает диапазон для работы всегда на D2:E2 - независимо от того, какой фактический отредактированный диапазон равен
  • Он работает только с первой строкой диапазона (range.getValues()[0])
  • Сравнивает столбцы 0 и 1 диапазона (например, столбцы D и E) и присваивает значение столбца D обратно столбцу D (это необходимо? ) и более высокое из двух значений в столбце E

Как изменить код?

Из вашего описания не совсем понятно, как заполнен столбец D и что вы хотите сделать со столбцом F, но дать общий совет:

  • Если вы хотите, чтобы ваша функция работала на всех строках:

Измените ваш диапазон и разверните его до последнего ряда. Затем выполните цикл по всем строкам:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("D2:E"+lastRow);
  for (var i = 0; i < lastRow-1; i++){
    var values = range.getValues()[i];
    range.setValues([[values[0], Math.max(values[0], values[1])]]);
  }
}
  • Если вы хотите, чтобы код выполнялся только в текущей редактируемой строке: используйте объект события e.range, чтобы найти out, которая является отредактированной строкой и работает с этой строкой:
function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = e.range;
  var row = range.getRow();
  var values = sheet.getRange(row, 4, 1, 2).getValues()[0];
  range.setValues([[values[0], Math.max(values[0], values[1])]]);
}

Примечание: getRange(row, 4, 1, 2) - это обозначение для получения диапазона, начинающегося с определенной строки и столбца 4 (D), 1 строка длиной и две колонки, см. здесь .

ВАЖНО: Если ваш лист заполняется автоматически с внешнего листа - триггер onEdit не будет работать для вас (стреляет только в ручные, сделанные человеком правки). В этом случае вам потребуется обходной путь, как описано здесь .

...