Google Sheets - скрипт для подсчета количества выпадающих выборок - PullRequest
0 голосов
/ 06 сентября 2018

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

Макет электронной таблицы

В настоящее время у меня есть настройки листа, чтобы сделать отметку времени каждый раз, когда делается выбор из раскрывающегося списка в столбце G. Параметры раскрывающегося списка: «В процессе», «Отправлено на утверждение» и «Утверждено» ,

Код, который я использую для метки времени, выглядит следующим образом:

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
   var r = s.getActiveCell();
   if( r.getColumn() == 7 ) { //checks the column
     var nextCell = r.offset(0, 1);
     var time = new Date();
     time = Utilities.formatDate(time, "America/New_York", "MM/dd/yy HH:mm");
     nextCell.setValue(time);
 };
}

Сейчас я пытаюсь создать счетчики в столбцах I и J, чтобы я мог видеть, сколько раз выбирается «Отправлено на утверждение» и «Утверждено» в строке.
Таким образом, в конце концов, у нас будет каждый раз, когда мы выбираем новый статус, мы получаем новую временную метку (которая в настоящее время работает отлично), но если выбрано «Передано на утверждение», то вы получите временную метку плюс +1 в «Отправленное число» (столбец). Я). И то же самое для «Одобрено» в столбце J.

Понятия не имею, как действовать дальше. Что мне добавить в мой скрипт, чтобы получить + 1 в других столбцах на основе выбора?

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 08 сентября 2018

Я думаю, что это проще, чем вы себе представляли. Поэтому я думаю, что если вы выберете «Отправлено на утверждение», то число в столбце I увеличится на 1, а если вы выберите «Утверждение», то число в столбце J увеличится на 1? Это просто простое утверждение If. Или Switch, если вы предпочитаете.

Я добавил еще немного кода в конец вашей функции onEdit. Посмотрите, работает ли это для вас.

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet()
   var r = s.getActiveCell()
   if( r.getColumn() == 7 ) { //checks the column
     var nextCell = r.offset(0, 1)
     var time = new Date()
     time = Utilities.formatDate(time, "America/New_York", "MM/dd/yy HH:mm")
     nextCell.setValue(time)

//-------------------- New code added as below -------------------------------

     var colNum = 0 
     if (r.getValue() == "Submitted to Approval") {
       colNum = 2
     }
     else if (r.getValue() == "Approval") {
       colNum = 3
     }
     if (colNum > 0) {
       var editCell = r.offset(0,colNum) // gets the offset selected by r
       var number = editCell.getValue() // gets the value, increase it by 1 and set it back
       number = number + 1
       editCell.setValue(number)
       } // colnum > 0
     } //r.getColumn() == 7
   } // onEdit

Конечно, colNum жестко запрограммирован на основе столбца вашего листа, и это не рекомендуется. Но это другое дело ..

Существует также проблема, заключающаяся в том, что когда G уже находился в состоянии «Одобрено» и вы снова выбираете «Одобрено», onEdit не сработает, поскольку лист Google решил, что вы ничего не «изменили», таким образом, число « Одобренная »колонка останется прежней. Я не знаю, построен ли ваш лист таким образом или нет, поэтому я только указываю на это.

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