@Ty39

Функция скрытия строки при одновременном соблюдении двух условий. Где ошибка?

Нужна функция скрытия строки при одновременном соблюдении двух условий. Вот что я накалякал.

function onEdit(e){
  if ((e.range.columnStart != 10 || e.value != "выполнено") && (e.range.columnStart != 13 || e.value != "312")) return;
  SpreadsheetApp.getActiveSheet().hideRows(e.range.rowStart);
};

В моем случае скрытие происходит при соблюдении только одного условия, будто работает "ИЛИ" а не "И". Где ошибка?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
SemanticMoscow
@SemanticMoscow
упростите и проверьте
let a = 9;
let b = 10;
if ((a  != 10 || b != 9) && (a  != 10 || b != 9)) alert(true);
alert(false);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@cssfish
Плохое знание основ - причина больших бед
Ну так при выполнении одного условия "И" не выполняется, return не происходит. вот и все.
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
(Колонка не 10) <b>ИЛИ</b> (значение не "выполнено")
при этом
(колонка не 13)<b> ИЛИ </b>(значение не "312")

Странное условие. Сгруппируйте по-другому, это должно помочь.
Я часто пользуюсь такой универсальной конструкцией:
// Файл config.gs
const config = {};

config.onEditTrigger = {
  isAllowSheetName: sheetName=>(["1", "2", "3"].includes(sheetName)),  // Лист - "1", "2" или "3"
  isAllowColumn: column=>([11,12,13].includes(column)), // колонка - 11,12 или 13
  isAllowRow: row=>(row>1), // строка - больше 1
  isAllowNewValue: value=>(value==="OK"), // новое значение - "ОК"
  isAllowOldValue: value=>true, // старое значение - любое
};

// Файл onEdit.gs
function onEditTrigger(event) { // переименовать onEditTrigger в onEdit, если хватит simple триггера. Если нужен полноценный триггер - установить триггер на редактирование на эу функцию
  let conf = config.onEditTrigger;
  let ss = SpreadsheetApp.getActiveSpreadsheet();

  let sourceSheet = event.source.getActiveSheet();
  let row = event.range.getRow();
  let col = event.range.getColumn();
  let newValue = event.value;
  let oldValue = event.oldValue;
  
  if(
     conf.isAllowColumn(col) &&
     conf.isAllowRow(row) && 
     conf.isAllowNewValue(newValue) && 
     conf.isAllowOldValue(oldValue) && 
     conf.isAllowSheetName(sourceSheet.getName())
    ){
      // что-то делаем
  };
};

Меняются условия работы в конфиге - для строки/столбца/имени листа/старого значения/нового значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы