Функция Google Sheets onEdit, переходящая в ячейку A1 - PullRequest
1 голос
/ 15 марта 2020

Я только начинаю с javascript и пытаюсь установить некоторые флажки в переключатели в Google Sheets. Он успешно отключает соответствующие флажки, когда один из них включен, но после запуска сценария активная ячейка всегда сбрасывается в ячейку А1 на листе «Домой», даже если редактирование выполнялось на другом листе.

Я заблудился относительно того, почему это происходит. Я хотел бы, чтобы исходный лист и ячейка, в которой находился пользователь, оставались активированными после запуска сценария.

function onEdit(e) {
  var ss = e.source;
  var eSheet = ss.getActiveSheet();
  var eRange = e.range;
  if ((eSheet.getSheetName() == "Home") && (e.range.rowStart == 8) && (e.range.columnStart > 2) && (e.range.columnStart < 8) && (e.value == "TRUE")) {

    // Makes sure no other checkboxes are on
    for (var i = 3; i < 8; i++) {
      if (i == e.range.columnStart) continue;
      SpreadsheetApp.getActiveSheet().getRange(e.range.rowStart, i).setValue(false);
    }
  }
};

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Попробуйте сначала получить активную электронную таблицу, вызывая ее только один раз.

function onEdit(e) {
  // console.log(JSON.stringify(e));
  let eSheet = SpreadsheetApp.getActiveSpreadsheet();
  if ((eSheet.getActiveSheet().getSheetName() == "Home") && (e.value == "TRUE") && (e.range.columnStart > 2) && (e.range.columnStart < 8) && (e.range.rowStart == 8)) {
    // Makes sure no other checkboxes are on
    for (var i = 3; i < 8; i++) {
      if (i == e.range.columnStart) continue;
      eSheet.getActiveSheet().getRange(e.range.rowStart, i).setValue(false);
    }
  }
}

Она не меняет курсор с активной ячейки.

0 голосов
/ 15 марта 2020

Я не уверен, что происходит, но что если вы попробуете это:

Поскольку вы используете объект события, вам не нужно использовать getActiveSheet(). Попробуйте использовать e.range.getSheet().

...