[英]Google Sheets Script: Get A1Notation For Each Cell In Named Range
[英]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.