应用程序脚本 getNamedRanges() 返回"[Named Range]"而不是范围名称



我对 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);
}

相关内容

最新更新