Как заставить функцию выполнять формулу на последней строке? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь использовать редактор сценариев, чтобы разрешить мне выполнять функцию, хранящуюся в ячейке A1, каждые 24 часа. Я хочу, чтобы сгенерированное значение было сохранено в ячейке A2, затем при следующем запуске сценария я хочу, чтобы это значение было сохранено в A3, и так и происходит. Проблема в том, что я не могу заставить свой код сделать это.

Я попытался отредактировать последние несколько строк скрипта, но не могу заставить его работать.

function recordChanges() {
  var url = 'LINK TO MY SHEET';   
  var ss = SpreadsheetApp.openByUrl(url);
  var sh = ss.getSheetByName('Sheet1'); 
  var range = sh.getRange("A1");    
  var values = range.getValues();
  var lastRow = sh.getLastRow();

  if (values[0][0] != values[1][0]) {
    sh.insertRowAfter(lastRow);
    sh.getRange().setValue(values[0][0]);
  }
}

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

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Я интерпретирую ваш вопрос как "как я могу скопировать значение A1 в следующую пустую ячейку в строке 1?" Приношу свои извинения, если я неправильно истолковал ваш вопрос, пожалуйста, дайте мне знать. Неясно, что вы подразумеваете под «выполнить формулу в последнем ряду»; уточните пожалуйста и возможно покажите формулу. Этот код не вносит изменения в A1: я предполагаю, что значение A1 уже каким-то образом изменилось, и все, что вам нужно сделать, это скопировать текущее значение в конец первой строки.

function recordChanges() {
  var url = 'LINK TO MY SHEET';   
  var ss = SpreadsheetApp.openByUrl(url);
  var sh = ss.getSheetByName('Sheet1'); 
  var range = sh.getRange("A1"); 
  var firstRow = range.getDataRegion(SpreadsheetApp.Dimension.COLUMNS);
  var values = firstRow.getValues();
  values[0].push(values[0][0]);
  sh.getRange(1, 1, 1, firstRow.getLastColumn() + 1).setValues(values);
}
0 голосов
/ 13 апреля 2019

getLastRow возвращает только последнюю строку листа с содержимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...