我对 App Script 很陌生,所以这对我来说是一个真正的头疼问题。
工作表 1 上有四个命名范围("范围 1"、"范围 2"、"范围 3"、"范围 4")Logger.log(SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getNamedRanges());
退货[NamedRange, NamedRange, NamedRange, NamedRange]
更大的目标是使此脚本正常工作,以返回活动单元格所在的命名区域。
试图让它工作和调试导致我达到上述内容,让我想知道脚本是否由于如何返回 getNamedRange 而无法正常工作?
测试表文件在这里。
[NamedRange]
结果是预期行为,还是我缺少某些内容来获取要返回的范围名称?
谢谢!
这是预期行为。记录类的对象时,类的名称通常记录在console
中。.getNamedRanges()
返回一个[]
namedRange
对象的数组。
console.log(
SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Sheet1")
.getNamedRanges()[0]/*First namedRange*/
)//Expected: NamedRange Type: Object
每个 namedRange 都有许多内置函数,即方法。此处列出了此类方法。一种这样的方法是getName()
.您可以使用它来获取NamedRange
对象的名称:
console.log(
SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Sheet1")
.getNamedRanges()[0]/*First namedRange*/
.getName()/*First named range's name*/
)//Expected: "Range1" Type:string
您可以使用 Array.map 获取所有名称:
console.log(
SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Sheet1")
.getNamedRanges()
.map(namedRange => namedRange.getName())
)//Expected: ["Range1","Range2","Range3","Range4"] Type: Object(specifically a array of strings)
getNamedRanges()
返回一个 NamedRange 数组。
let namedRanges = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getNamedRanges());
namedRanges.forEach( namedRange => Logger.log(namedRange.getRange().getA1Notation()) );
将给出 A1 表示法的范围列表,例如
A1:B10
C2:Z100
显示范围名称、工作表名称和 A1 表示法
function getSpreadsheetsNamedRanges() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const nrA = ss.getNamedRanges().map(rg => [rg.getName(),rg.getRange().getSheet().getName(),rg.getRange().getA1Notation()])
sh.clearContents();
nrA.unshift(["Range Name","Sheet Name","A1 Notation"]);
sh.getRange(1,1,nrA.length,nrA[0].length).setValues(nrA);
}