Скрипты Google Sheets - получить именной диапазон из активной ячейки - PullRequest
0 голосов
/ 05 июня 2018

Я создал NamedRange и использовал его для проверки данных.определенная ячейка.

В моем скрипте, когда эта ячейка редактируется, я хотел бы знать, что определенная ячейка использует определенный NamedRange.

может извлечь диапазон проверки данных из ячейки:

SpreadsheetApp.getActiveSheet().getActiveCell()

Однако это не названный диапазон.

Есть ли способ сделать это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Спасибо, Лиора - это очень помогает!

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

function onEdit() {
  var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
  var rangeName = getRangeName(cell);
  Logger.log('The named range is %s', rangeName);
}

function getRangeName(cell) {
  var rangeName = "";

  if (!cell) return;

  var dataValidation = cell.getDataValidation();

  if (!dataValidation) return;

  var A1Notation = dataValidation.getCriteriaValues()[0].getA1Notation();

  //get all the name ranges of the sheet where I put my lists
  var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('lists').getNamedRanges();
  // loop on all the names range of the sheet
  for(i=0;i<namedRanges.length;i++){
    //if it's the same A1 Notation
    if(namedRanges[i].getRange().getA1Notation() == A1Notation)
      rangeName = namedRanges[i].getName();
  }
  //will return the name of the range or "" if there is no range
  return rangeName;
}
0 голосов
/ 05 июня 2018

Нет встроенной функции для этого.Вы можете создать свою собственную функцию, которая будет проверять ее.
Что-то вроде:

function getRangeName(A1Notation) {
    var rangeName = "";
    //get all the name ranges of the sheet
    var namedRanges = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getNamedRanges();
    // loop on all the names range of the sheet
    for(i=0;i<namedRanges.length;i++){
        //if it's the same A1 Notation
        if(namedRanges[i].getRange().getA1Notation() == A1Notation)
            rangeName = namedRanges[i].getName();
    }
    //will return the name of the range or "" if there is no range
    return rangeName;
}

Тогда вам просто нужно будет вызвать getRangeName(SpreadsheetApp.getActiveSheet().getActiveCell().getA1Notation()), чтобы получить имя диапазона.

Youвозможно, придется немного обновить его, если ваш диапазон больше одной ячейки

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