Как обновить список dataValidation с помощью скрипта Google Sheets - PullRequest
0 голосов
/ 25 мая 2020

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

function setItemList(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var arquivoItens = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ArquivoItens');
  var activeCell = ss.getActiveCell();
  var versao = ss.getRange("AD4");
  var itemList = arquivoItens.getRange('B2:B');

  if(ss.getSheetName() === "EditarItem" && activeCell.getColumn() == 24 && activeCell.getRow() == 4){
    var arrayValues = itemList.getValues();  
    var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(arrayValues);
    activeCell.setDataValidation(rangeRule);
    Logger.log(itemList);
   }
  }

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Так работает, потому что это написано в коде. В вашем коде явно указано, что он должен выполняться, только если activeCell равен «X4». Поэтому я не уверен, действительно ли вам это нужно, если да, сообщите нам, чего вы пытаетесь достичь там, иначе удалите эту часть, как здесь.

function setItemList(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var arquivoItens = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ArquivoItens');
  var activeCell = ss.getActiveCell();
  var versao = ss.getRange("AD4");
  var itemList = arquivoItens.getRange('B2:B');

  if(ss.getSheetName() === "EditarItem"){
    var arrayValues = itemList.getValues();  
    var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(arrayValues);
    activeCell.setDataValidation(rangeRule);
    Logger.log(itemList);
   }
  }

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

0 голосов
/ 25 мая 2020

Вы можете создавать триггеры, управляемые временем, например:

time trigger

Я бы рекомендовал вам изменить getActiveSpreadsheet() на openById(id)

...