#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 строка данных, но диапазон имеет 998. (строка 12, файл «CopyPastePortfolioValue»)
- Я не знаю, как вставлять значение в новую ячейку каждый день (вставлять в ячейку под предыдущей каждый день)
Спасибо за вашу помощь!
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите извлечь значение из ячейки
N15
на исходном листе и добавить значение на целевой лист.
Точки модификации:
- При
setValues(values)
использовании длины строк и столбцовvalues
должны соответствовать диапазону. В вашем скриптеvalues
ofvar 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.
. Чтобы правильно понять это, могу я спросить вас о деталях вашей текущей проблемы? А также, чтобы правильно воспроизвести вашу ситуацию, можете ли вы предоставить образец электронной таблицы, включающий ваш текущий сценарий для воспроизведения вашей проблемы? Этим я хотел бы подтвердить это.