как определить, в каком именованном диапазоне пользователь щелкнул - PullRequest
0 голосов
/ 07 июня 2019

У меня есть несколько NAMED RANGES на разных листах Google в одном файле электронной таблицы.Я хочу, чтобы мой код скрипта Google-apps определял, в каком из этих диапазонов щелкнул пользователь.

Я знаю, как получить значение в активной ячейке, в которой щелкнул пользователь, но я не знаюкак получить его адрес (строка и столбец).Даже если я получу строку и столбец, как мне узнать, какой RANGE содержит эту ячейку?

[У меня нет кода, который даже близко подходит.]

У меня нет реальных результатов,Я хочу что-то вроде range = activeCell.parentRange (есть функция, которая делает это?)

1 Ответ

0 голосов
/ 07 июня 2019

Для электронных таблиц нет события onClick. Однако вы можете определить, какой из именованных диапазонов редактируется. Вам нужно будет установить и активировать onEdit для InstallonEdit, и не забудьте вставить e.

function InstallibleonEdit(e) {
  sh=e.range.getSheet();
  if(sh.getName()!="Sheet162"){return;}//You will probably want to change this sheet name
  var cell={row:e.range.rowStart,column:e.range.columnStart};
  var rA=isInNamedRanges(cell);
  if(rA) {
    var html=rA.join(', ');
    var userInterface=HtmlService.createHtmlOutput(html);
    SpreadsheetApp.getUi().showModelessDialog(userInterface, 'In these ranges');  
  }
}

function isInNamedRanges(cell) {
  var ss=SpreadsheetApp.getActive();
  var nrgs=ss.getNamedRanges();
  var inrgs=[];
  for(var i=0;i<nrgs.length;i++) {
    var rg=nrgs[i].getRange();
    var columnStart=rg.getColumn();
    var rowStart=rg.getRow();
    var columnEnd=columnStart + rg.getWidth() - 1;
    var rowEnd=rowStart + rg.getHeight() -1;
    var range={left:columnStart,right:columnEnd,top:rowStart,bottom:rowEnd};
    if(isCellInRange(cell,range)) {
      inrgs.push(nrgs[i].getName());
    }
  }
  return inrgs;
}

function isCellInRange(cell,range) {
  if(cell.row>=range.top && cell.row<=range.bottom && cell.column>=range.left && cell.column<=range.right) {
    return true;
  }else{
    return false;
  }
}

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

Вот так выглядел мой лист. Я изменяю фон на названных диапазонах.

enter image description here

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

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