Скрипты Google Sheets, относящиеся к нескольким столбцам - PullRequest
0 голосов
/ 21 января 2020

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

function onEdit(){

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Operators");

  var activeCell = ss.getActiveCell();

  if(activeCell.getColumn() == 10 && activeCell.getRow() > 8){

    activeCell.offset(0, 1).clearContent().clearDataValidations();

    var headers = datass.getRange(1, 1, 1, 2).getValues();

    var headersIndex = headers[0].indexOf(activeCell.getValue()) + 1;

    if(headersIndex != 0){

        var validationRange = datass.getRange(2, headersIndex, datass.getLastRow());
        var validationRule = SpreadsheetApp.newDataValidation().requireValueInRange(validationRange).build();
        activeCell.offset(0, 1).setDataValidation(validationRule);

    }

  }



}

Это работает! !! это фантастика c. Однако у меня есть вопрос, который относится к следующей строке приведенного выше сценария

if(activeCell.getColumn() == 10 && activeCell.getRow() > 8){

Столбец 10 в моей электронной таблице относится к столбцу J, куда зависимый раскрывающийся список в столбце K извлекает свою информацию из предоставить правильную информацию в зависимом выпадающем списке, и с этой строкой, мой скрипт работает нормально. Однако у меня также есть повторы этого в столбцах N (столбец № 14), R (столбец № 18) и V (столбец № 22), которые все предоставляют ту же информацию, что и для столбца J для зависимого раскрывающегося списка в следующем столбце.

Итак, в основном мой вопрос заключается в том, могу ли я включить в этот сценарий номера столбцов 14, 18 и 22, чтобы они работали так же, как столбец 10, сохраняя их независимость друг от друга? - ie в том смысле, что я не хочу выбирать что-то, относящееся к столбцу J, и оно дублируется в столбце N.

Я попытался просто создать следующую строку:

if(activeCell.getColumn() == 10, 14, 18, 22 && activeCell.getRow() > 8){

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

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

function onEdit(){
  j();
  n();
  r();
  v();

}

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

1 Ответ

1 голос
/ 21 января 2020

Проблема вызвана синтаксисом

if(activeCell.getColumn() == 10, 14, 18, 22 && activeCell.getRow() > 8)

Чтобы применить вашу функцию одновременно к нескольким столбцам, вам необходимо

использовать логический оператор ИЛИ ||.

Это означает: изменить

if(activeCell.getColumn() == 10, 14, 18, 22 && activeCell.getRow() > 8)

на

if((activeCell.getColumn() == 10 || activeCell.getColumn() == 14 || activeCell.getColumn() == 18 || activeCell.getColumn() == 22) && activeCell.getRow() > 8)

Дополнительно: чтобы упростить код, перепишите его следующим образом:

  var active = activeCell.getColumn();
  if((active == 10 || active == 14 || active == 18 || active == 22) && activeCell.getRow() > 8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...