Мне немного непонятно, каковы ваши намерения и какие у вас проблемы.
Несколько вещей, которые я вижу:
1) Поскольку ваш диапазон - одна ячейка, var numCols = range.getNumColumns();
следуетвсегда возвращайте 1, поэтому ваш цикл for (i = 1; i <= numCols; i++)
должен выполняться ровно один раз.Такое ощущение, что здесь много избыточного кода.
Чтобы получить значение ячейки A2, вы можете просто написать:
var range = sh.getRange("A2");
var currentValue = range.getValue();
2) Из операторов if
этопохоже, что вы хотите добавить новую строку, только если значение A2
отличается от «НЕТ».Это верно?(Это не то, что говорит ваш вопрос).Если это так, я думаю, вы довольно близки с оператором sh.insertRowBefore(firstRow);
, просто он может потеряться в какой-то запутанной логике.
3) Вы действительно хотите скопировать все из строки 3 в строку 2?В вопросе вы утверждаете: «Все, что я хочу, это пустая строка над предыдущей строкой, когда ячейка соответствует определенным критериям».
Возможно, что-то вроде этого ближе к тому, что вы хотите?
function conditionalNewRow() {
var ss = SpreadsheetApp.getActive().getSheetByName("NEW INV");
var sh = ss.getActiveSheet();
var range = sh.getRange("A2"); // Get range of row 2.
var currentValue = range.getValue();
if (currentValue !== "NO") {
sh.insertRowBefore(firstRow); // Insert an empty row into row 2.
}
}
Редактировать
Из вашего комментария звучит так, будто вы хотите вставить новую строку всякий раз, когда A2 редактируется для одного из выбираемых значений.Вы можете проверить простых триггеров , таких как onEdit
, которые запускаются всякий раз, когда ячейка редактируется.Например, что-то вроде этого:
/**
* The event handler triggered when editing the spreadsheet.
* @param {Event} e The onEdit event.
*/
function onEdit(e) {
// get sheet
var sheet = SpreadsheetApp.getActive().getSheetByName("NEW INV");
// Get the edited range
var editedRange = e.range;
// check if cell A2 was edited
if (editedRange.getA1Notation() === "A2") {
// check if value is a desired value
if (editedRange.getValue() === "YES" || "NO" || "LOADED" || "UNLOADED") {
// if yes to both, insert new row
sheet.insertRowBefore(2);
}
}
}