在Google Apps脚本中,电子表格和表格上有一个getNamedRanges()方法,该方法返回命名范围的列表。但是没有getNamedRange(“ Name”)会返回一个名为range的单。
这对我来说似乎很奇怪。
为了解决这个问题,我使用了一个复杂的过程:
function testing()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var nameOfNamedRange = "NameOfMyNamedRange";
var namedRanges = ss.getNamedRanges();
/* ###### THIS IS WHAT I HAVE TO DO ######### */
for (i = 0; i<namedRanges.length; ++i)
{ var nRange = namedRanges[i];
if ( nRange.getName() == nameOfNamedRange )
{
/* Process nRange
doSomething(nRange);
*/
Logger.log(nRange.getName());
}
}
/* ############ THIS IS WHAT I'D LIKE TO DO (or something similar) ##########
var nRange = ss.getNamedRange("NameOfMyNamedRange") // ...Range not ...Ranges
*/
}
有更简单的方法吗?我不禁以为我缺少明显的东西。
答案 0 :(得分:1)
例如,如何使用getRangeByName()
的方法?
var ss = SpreadsheetApp.getActiveSpreadsheet();
var nameOfNamedRange = "NameOfMyNamedRange";
var nRange = ss.getRangeByName(nameOfNamedRange); // Added
当您要检索单个命名范围时,以下示例脚本又如何呢,因为没有可直接检索单个命名范围的方法?在电子表格中,命名范围的名称仅为一个。可以使用。请认为这只是几个答案之一。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var nameOfNamedRange = "NameOfMyNamedRange";
var nRange = ss.getNamedRanges().filter(function(e) {return e.getName() === nameOfNamedRange})[0]; // Added
答案 1 :(得分:1)
不幸的是,没有函数可以返回单个NamedRange
实例。但是您可以清理当前的变通办法,并将其包装为实用程序函数,如下所示:
(function(scope){
const Utils = scope.Utils || (scope.Utils = {});
/**
* Filter function
*/
function filterByName(namedRange) {
return this.name === namedRange.getName();
}
/**
* Gets named range by name.
*
* @param {Spreadsheet|Sheet} context - An instance of Spreadsheet or Sheet.
* @param {String} name - The name of a NamedRange.
*
* @return {NamedRange} A NamedRange or null if not found.
*/
function getNamedRangeByName(context, name) {
if (!context || !context.getNamedRanges) {
throw new Error("Invalid context object; must implement getNamedRanges()");
}
var filtered = context.getNamedRanges().filter(filterByName.bind({name:name}));
return filtered.length ? filtered[0] : null;
}
Utils.getNamedRangeByName = getNamedRangeByName;
})(this);
只需将以上脚本添加到您的项目中,然后按如下所示进行调用:
var ss = SpreadsheetApp.getActive();
var nameOfNamedRange = "[NAME_OF_NAMED_RANGE]";
var namedRange = Utils.getNamedRangeByName(ss, nameOfNamedRange);
答案 2 :(得分:0)
其实,有一种方式来获得一个命名范围。让说我有一个名为范围A1:B3所谓的“测试”
var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("Test").getValues();
将返回A1:B3中的值。或更简单。
var values = SpreadsheetApp.getActiveSpreadsheet().getRange("Test").getValues();
如果目标是改变名字尝试。
var spread = SpreadsheetApp.getActiveSpreadsheet();
var range = spread.getRange("Test");
spread.setNamedRange("Other",range);