Копировать / вставлять значения каждый день в предыдущую вставленную ячейку?

#google-apps-script

#google-apps-script

Вопрос:

Вот моя проблема: я пытаюсь скопировать значение из одной ячейки в «sheet1» в другую ячейку в «sheet2». Но я хочу запускать этот скрипт каждый день (используя триггер), потому что значение меняется каждый день. Таким образом, вставка должна быть в B2 в первый день, B3 на второй день и т.д. Я хочу иметь возможность следить за значением изо дня в день и иметь исторический.

Вот мой текущий скрипт :

 function backup(){

  var sourceSheet  = "Portfolio" ;
    var sourceRange = "N15" ;
  var targetSheet = "Suivi perfs journalières" ;
    var targetRange = "B2:B999" ;

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sourceSheet);
  var values = sheet.getRange(sourceRange).getValues();
  ss.getSheetByName(targetSheet).getRange(targetRange).setValues(values);
 

У меня проблема 2 :

  1. Мой скрипт отправляет мне эту ошибку: Исключение: количество строк данных не соответствует количеству строк в диапазоне. Есть 1 строка данных, но диапазон имеет 998. (строка 12, файл «CopyPastePortfolioValue»)
  2. Я не знаю, как вставлять значение в новую ячейку каждый день (вставлять в ячейку под предыдущей каждый день)

Спасибо за вашу помощь!

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите извлечь значение из ячейки N15 на исходном листе и добавить значение на целевой лист.

Точки модификации:

  • При setValues(values) использовании длины строк и столбцов values должны соответствовать диапазону. В вашем скрипте values of var values = sheet.getRange(sourceRange).getValues(); — это 1 строка и 1 столбец. Но целевой диапазон есть B2:B999 . При этом возникает такая ошибка. Я думаю, что это ответ на ваш 1-й вопрос.
  • Чтобы добавить значение к целевому листу, в вашем случае я хотел бы предложить использовать appendRow . Я думаю, что это ответ на ваш 2-й вопрос.
  • И, когда значение из ячейки, вы также можете использовать getValue вместо getValues .

Когда вышеуказанные пункты отражаются в вашем скрипте, это выглядит следующим образом.

Модифицированный скрипт:

 function backup(){
  var sourceSheet  = "Portfolio";
  var sourceRange = "N15";
  var targetSheet = "Suivi perfs journalières";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sourceSheet);
  var value = sheet.getRange(sourceRange).getValue();  // Modified
  ss.getSheetByName(targetSheet).appendRow([value]);  // Modified
}
 

Ссылки:

Комментарии:

1. Привет, Танайке! Спасибо за вашу помощь. Я понимаю, почему рекомендуется использовать appendRow, когда я запускаю ваш модифицированный скрипт, который не добавляет строку и не вставляет значение.

2. @Demeterro Спасибо за ответ. Я прошу прощения за мой плохой английский. К сожалению, я не могу понять I understand why it is a good idea to use appendRow, when I run your modified script, that doesn't add a row, and it doesn't paste the value neither. . Чтобы правильно понять это, могу я спросить вас о деталях вашей текущей проблемы? А также, чтобы правильно воспроизвести вашу ситуацию, можете ли вы предоставить образец электронной таблицы, включающий ваш текущий сценарий для воспроизведения вашей проблемы? Этим я хотел бы подтвердить это.