Проблема запуска макроса, когда конкретная ячейка имеет определенное значение

Я пытаюсь вызвать скрипт макроса / приложений листа google для переформатирования листа, когда в определенную ячейку вводится определенное значение. Я работал над этим, чтобы заставить его работать, но безуспешно.

Вот мой код;

function onEdit(e) {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange('C2');
  var cellContent = cell.getValue();

  if(cellContent === 'Past campaigns - actual cashflows to date only') {
    spreadsheet.getRange(ƍ:12').activate();
    spreadsheet.getActiveSheet().hideRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
    spreadsheet.getRange(ཉ:13').activate();
  }
};

Я новичок в макросах и скриптах приложений. Я попытался реализовать все предложения по следующим ссылкам без успеха;

Всего 2 ответа


Как сказал @Cooper, вы не можете сделать триггер на основе значения ячейки. Только на пользовательских изменениях.

Вы можете попытаться заставить триггер onEdit выполняться только внутри оператора if . Но это уже то, что вы сделали.


Попробуй это:

function onEdit(e) {
  e.source.toast('Entry');
  const sh=e.range.getSheet();  
  if(sh.getName()!='Sheet Name')return;//you need to change this sheetname
  const X=sh.getRange('C2').getValue();
  if(X=='Past campaigns - actual cashflows to date only') {
    e.source.toast('flag1');
    sh.hideRows(e.range.rowStart,e.range.rowEnd-e.range.rowStart+1);
  }
}

Нет необходимости использовать активацию в большинстве сценариев и, конечно, в этом, поскольку она должна завершиться за 30 секунд. Они используют активацию в макросах, потому что они следуют за вашими действиями, когда вы перемещаетесь по экрану. Но в сценарии, как правило, не нужно сильно взаимодействовать с экраном, потому что он замедляет сценарий и ничего не делает.

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

попробуйте это так:

function onEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();  
  if(sh.getName()!='Sheet Name')return;//you need to change this sheetnamee
  var X=sh.getRange('C2').getValue();
  if(X=='Past campaigns - actual cashflows to date only') {
    //e.source.toast('flag1');
    sh.hideRows(e.range.rowStart,e.range.rowEnd-e.range.rowStart+1);
  }
}

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


Есть идеи?

10000