Суть вашей проблемы в том, что вместо непосредственного получения диапазонов, на которые вы хотите посмотреть, вы используете активный диапазон (var r = SpreadsheetApp.getActiveRange();
) и проверяете в двух вложенных операторах if
, является ли этот диапазон одновременно в строке 19 и строке 20, и , является ли этот диапазон пустым и содержит что-то ("y" или "n"). Другими словами, чтобы попасть в ваш первый блок кода, должно быть верно следующее:
s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 20
&& r.getValue() == "y") {
&& s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 19
&& r.getValue(r.isBlank()) == false
Излишне говорить, что это логически сомнительно: -)
Кроме того, r.getValue(r.isBlank()) == false
не имеет особого смысла - вы, вероятно, захотите r.isBlank()
, если вы ищете столбец 19 пустым. Мой ответ отражает это, и вы должны изменить это условие, если я ошибаюсь.
Я также заметил, что ваши действия выглядят одинаково, независимо от того, находите ли вы «y» или «n» в столбце 20: в любом случае вы удаляете исходную строку и вставляете ее в «Reviewed 2018 2 Week Snapshot для Jim». " Мой ответ сохраняет различие, потому что я предполагаю, что есть и другие вещи, которые вы хотите сделать, условно увидев год.
В любом случае, это должно делать то, что, я думаю, вы пытаетесь сделать (обратите внимание на все предостережения?: D)
function onEdit() {
var r = SpreadsheetApp.getActiveRange(); // The range being edited
var s = r.getSheet(); // Its sheet
if (s.getName() != "2018 2 Week Snapshot for Jim") {
// We're not editing the sheet we're interested in...
return;
}
var activeRow = r.getRow(); // What row number are we on?
var colNineteenNotBlank = !s.getRange(activeRow, 19).isBlank(); // Or did you need this *not* to be blank?
var colTwentyValue = s.getRange(activeRow, 20).getValue();
var numColumns = s.getLastColumn();
var sourceRange = s.getRange(activeRow, // start this row
1, // start column 1 (A)
1, // range should be 1 row
numColumns); // range should be this many columns
var targetSheet = ss.getSheetByName("Reviewed 2018 2 Week Snapshot for Jim");
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1,
1,
1,
numColumns);
if (colTwentyValue == "y" && colNineteenNotBlank) {
sourceRange.moveTo(targetRange);
} else if (colTwentyValue == "n" && colNineteenNotBlank) {
// maybe you wanted something else here?
sourceRange.moveTo(targetRange);
}
}
Это все еще не пуленепробиваемое; если целевой лист заполняется, я не уверен, что получение диапазона от «конца» листа будет работать. Если это обычное явление, я бы проверил совпадения targetSheet.getMaxRow()
и targetSheet.getLastRow()
и сделал бы targetSheet.appendRow()
, если это так.