Ошибка запуска макроса, когда указанная ячейка c имеет заданное значение c - PullRequest
0 голосов
/ 11 февраля 2020

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

Вот мой код;

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('7:12').activate();
    spreadsheet.getActiveSheet().hideRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
    spreadsheet.getRange('13:13').activate();
  }
};

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

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Попробуйте:

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);
  }
}

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

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

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

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);
  }
}

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

0 голосов
/ 11 февраля 2020

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

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

...