Вопрос или проблема
Я использую Google App Script. Я пытаюсь добавить переменную последней строки (N) в переменную диапазона (rngForForm), чтобы диапазон был динамическим, а не зашитым. Переменные left, sprLeft и setLeft работают, я просто не могу заставить переменную rngForForm принять значение N. Поэтому мне нужно, чтобы это выглядело так:
var rngForForm = "$B$3:$B(N variable here)";
function usingFunction2() {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetName="sprintuniquename";
var selectedSheet = activeSpreadsheet.getSheetByName(sheetName);
var mySheet = selectedSheet;
var lastRow = mySheet.getLastRow();
var N = lastRow;
for (var i = 2; i <= N; i++) {
var left="LEFT($A$3:$A" + N + ',3)';
var sprLeft="LEFT($A$3:$A" + N + ',9)';
var setLeft="LEFT($A$3:$A" + N + ',12)';
var rngForForm = "$B$3:$B$1000";
}
var trimData = mySheet.getRange(rngForForm).setFormula(left);
var sourceVals = trimData.getValues();```
Ответ или решение
Вам необходимо динамически установить диапазон (range) в Google Apps Script, чтобы он автоматически обновлялся в зависимости от последней строки данных в вашем листе. Основной проблемой, с которой вы сталкиваетесь, является конструкция строки диапазона, которая в данный момент является статичной.
Вот как можно создать переменную rngForForm
, чтобы она использовала динамическое значение последней строки:
function usingFunction2() {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "sprintuniquename"; // Имя вашего листа
var selectedSheet = activeSpreadsheet.getSheetByName(sheetName);
var mySheet = selectedSheet;
var lastRow = mySheet.getLastRow(); // Получаем последнюю строку
// Формируем диапазон на основе последней строки
var rngForForm = "$B$3:$B$" + lastRow;
// Создаём формулы
var left = "LEFT($A$3:$A$" + lastRow + ',3)';
var sprLeft = "LEFT($A$3:$A$" + lastRow + ',9)';
var setLeft = "LEFT($A$3:$A$" + lastRow + ',12)';
// Устанавливаем формулу в диапазон
var trimData = mySheet.getRange(rngForForm).setFormula(left);
var sourceVals = trimData.getValues();
// Добавьте любые дополнительные операции с sourceVals, если это необходимо
}
Описание кода:
-
Получение последней строки: Мы используем метод
getLastRow()
для получения номера последней строки с данными. Это позволяет сделать вашу программу динамической, так как диапазон будет меняться в зависимости от количества строк данных. -
Формирование строки диапазона: Вместо жестко закодированного диапазона
"$B$3:$B$1000"
, мы создаем строку диапазонаrngForForm
динамически, используя переменнуюlastRow
. -
Инициализация формул: Для формул
left
,sprLeft
иsetLeft
также используется последняя строка. Это гарантирует, что в формулы всегда будут включены все доступные данные. -
Установка формулы в диапазон: После формирования динамического диапазона, мы устанавливаем формулу в указанный диапазон.
Заключение
Этот подход обеспечит гибкость вашего скрипта и автоматическое обновление диапазона в зависимости от количества данных. Использование переменной lastRow
в строках формула и диапазона делает ваш код более чистым и уменьшает вероятность ошибок, связанных с изменением размеров данных в вашем листе.