簡體   English   中英

谷歌表格腳本 - 從活動單元格中獲取命名范圍

[英]Google Sheets scripts - get named range from active cell

我創建了一個 NamedRange 並將其用於 . 某個細胞。

在我的腳本上,當編輯此單元格時,我想知道某個單元格使用某個 NamedRange。

可以從單元格中獲取數據驗證范圍:

SpreadsheetApp.getActiveSheet().getActiveCell()

但是,這不是命名范圍。

有什么辦法嗎?

謝謝!

沒有內置功能可以做到這一點。 您可以創建自己的功能來檢查它。
就像是:

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())即可獲得范圍名稱。

如果您的范圍超過一個單元格,您可能需要稍微更新一下

謝謝 Liora - 這很有幫助!

我的要求是獲取另一個工作表中單元格的數據驗證所使用的命名范圍的名稱 - 我稍微改變了你的答案並得到了這個,它工作得很好:

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;
}
function onEdit(e){
  var myRng = SpreadsheetApp.getActiveSheet().getRange('REPLACE_WITH_YOUR_RANGE_NAME');
  var actRng = SpreadsheetApp.getActiveSheet().getActiveCell();
  SpreadsheetApp.getUi().alert('The active cell is in named range ' + rangeIntersect(myRng, actRng));
}

function rangeIntersect (R1, R2) {
      return (R1.getLastRow() >= R2.getRow()) && (R2.getLastRow() >= R1.getRow()) && (R1.getLastColumn() >= R2.getColumn()) && (R2.getLastColumn() >= R1.getColumn());
    }

改編自 Reno Blair, Google App Script。 檢查 Range1 是否與 Range2 相交

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM