Как я могу получить этот скрипт для запуска на редактировать - PullRequest
0 голосов
/ 07 ноября 2018

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

У меня есть другой файл кода на этом листе, который также использует onEdit, как я могу включить тот же onEdit в этот код или заставить его запускаться всякий раз, когда столбец G выбран «Завершено», чтобы затем изменить столбец H на «отправленный»

function addValidation() {

  // Get the spreadsheet and active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Get the data as an Array you can iterate and manipulate
  var data = sheet.getDataRange().getValues();

  var rule = SpreadsheetApp.newDataValidation().requireValueInList(["Complete"]).build();

  // Loop the sheet
  for(var i=0; i<data.length; i++) {


    if(data[i][11] == "Complete") {


      sheet.getRange(i+1, 8).clear().setDataValidation(rule);

    }  {
      sheet.getRange(i+1, 8).clearDataValidations().setValue("Shipped");
    }
  }
}

1 Ответ

0 голосов
/ 07 ноября 2018

Пара вещей:

В вашем выражении if вы не проверяете столбец G - вы проверяете столбец K (11). Если вы хотите проверить G, вам нужно изменить свой if на:

if(data[i][6].toString() == "Complete") {
  ...
}

Ваша логика обратная, и вам не хватает ключевого слова else для запуска альтернативы. Таким образом, он будет помечен как «Отправлено», если он не соответствует «Завершено» Поменяйте местами операторы, чтобы правильно заполнить значения ячеек.

Кроме того, проверка строк в цикле немного сложнее. Ссылки на ячейки в качестве индексов - это объекты , а не строки. Вам нужно преобразовать ячейку, используя метод .toString(), прежде чем вы сможете сравнить прямую строку.

Весь ваш сценарий должен гласить:

  function addValidation() {

  // Get the spreadsheet and active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Get the data as an Array you can iterate and manipulate
  var data = sheet.getDataRange().getValues();  

  // Loop the sheet
  for(var i=0; i<data.length; i++) {

    // To change which columns you're testing, change the second value.
    // ColG = 6, not 11.
    // Convert data[i][6] using .toString() to compare the value
    if(data[i][6].toString() == "Complete") {

      // If it's "Complete," mark Col H as 'Shipped'
      sheet.getRange(i+1, 8).setValue("Shipped");

    } else {
      // If you want something else to happen, add that here.
    }
  }
}

Последний шаг - включить триггер для скрипта. Если вы назовете свою функцию onEdit(), она запустится сама по себе, потому что редактирование - это простой скрипт. Поскольку он называется addValidation, вам необходимо вручную добавить триггер onEdit в пользовательском интерфейсе. Перейдите в «Правка»> «Триггеры текущего проекта» и нажмите «Добавить триггер» в правом нижнем углу. Выполните шаги в пользовательском интерфейсе, и скрипт должен запуститься сам.

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