Google Sheets, если функция не работает, когда истина - PullRequest
1 голос
/ 30 октября 2019

Я хотел добавить кнопку в отчет в листах Google. Кнопка работает, но вы не можете использовать ее на телефоне, поэтому мне сказали, что вы должны использовать onEdit. Проблема, которую я имею, состоит в том, чтобы вносить изменения только при редактировании определенного окна, но когда это правильное окно, кажется, что Google зависает и не запускает скрипт.

Я уже пробовал с моимесли как (row = 8), (Row == 8) и (Row == "8").

    function onEdit(evt) {
      var range = evt.range;
      var row =  range.getRow().toString();
      Logger.log("line 1");
      Logger.log("edited!! Row: " + row + " and column: " + range.getColumn ());

      if (row == "8"){             // && range.getColumn() = 6 ){ (This bit is for after I figure the row issue out.
        Logger.Log("right");
      } else {// esstsgs
        Logger.log("Wasnt the right cell"); 
      }
      Logger.log("Done the thing");
    }

Итак, с этим кодом, если я редактирую какую-либо строку, кроме 8, мой журнал выглядит так:

строка 1 отредактирована !!

Строка х и столбецх

сделал дело

Но если это строка 8, мой журнал говорит:

строка 1

Отредактировано !! Строка x и столбец x

И не более того, когда он замерзает в операторе if?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

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

Я не использую Logger.log () для отладки такого рода кода. Вместо этого я использую функцию e.source.toast().

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!='Sheet189')return;//this is important so that you don't get edits from unwanted pages
  //e.source.toast('Flag1');
  if(e.range.rowStart==8 && e.range.columnStart==6) {             
    var msg=Utilities.formatString('You are editing %s.',sh.getRange(e.range.rowStart,e.range.columnStart).getA1Notation());
    SpreadsheetApp.getUi().alert(msg);
  } 
  if(e.range.rowStart!=8 || e.range.columnStart!=6) {
    var msg=Utilities.formatString('You are not editing F8. Instead you are editing %s.',sh.getRange(e.range.rowStart,e.range.columnStart).getA1Notation());
    SpreadsheetApp.getUi().alert(msg);
  }
}

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

0 голосов
/ 30 октября 2019

Прежде всего я хотел бы указать на некоторые ошибки в вашем коде.

  • Вам не нужно делать переменную Row строкой. var row = range.getRow(); просто отлично.

  • Вы всегда регистрируете "Строку 1", почему бы не обновить ее, чтобы фактически сказать, какая строка была обновлена? Logger.log("line " + row);

  • Ваш код выведет «Готово» независимо от того, что он сделал. Может быть, просто скажите, что он что-то сделал, когда это правильное поле?

Ваш фиксированный код будет выглядеть так:

function onEdit(evt) {
      var range = evt.range;
      var row =  range.getRow();
      var col =  range.getColumn();

      Logger.log("line " + row + "edited!! Row: " + row + " and column: " + col);

      if (row == 8 && col == 6 ) {
        Logger.log("Right cell. Did the thing.");
        //Call here whatever you want to trigger when this cell changes.
      } //Don't need a "else" if you are not going process anything
    }

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...