Google apps script Google Sheets应用程序脚本,从命名范围返回随机项
我试图创建一个自定义函数,我可以给一个名称范围作为输入,并让它从名称范围中输出一个随机项。我有多个命名范围,因此可以方便地使用一个函数来处理所有这些范围。这就是我试图替换的Google apps script Google Sheets应用程序脚本,从命名范围返回随机项,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我试图创建一个自定义函数,我可以给一个名称范围作为输入,并让它从名称范围中输出一个随机项。我有多个命名范围,因此可以方便地使用一个函数来处理所有这些范围。这就是我试图替换的=INDEX(命名范围,randbween(1,COUNTA(命名范围)),1) 这是我尝试过的,但不起作用: function tfunction(n) { var randomstuffs = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n); var
=INDEX(命名范围,randbween(1,COUNTA(命名范围)),1)
这是我尝试过的,但不起作用:
function tfunction(n) {
var randomstuffs = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n);
var randomstuff = randomstuffs[Math.floor(Math.random()*randomstuffs.length)];
Logger.log(randomstuff);
}
提前感谢返回对某个范围的引用,而不是该范围内的值。您需要向其中添加.getValues()
:
var randomstuffs = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getValues();
还要记住,它返回一个二维值数组,先按行索引,然后按列索引。因此,您的
var randomstuff
声明将需要更改以说明这一点,具体取决于您的范围中有多少行和列。您可以尝试以下编辑的脚本:
function tfunction(n) {
//randomstuffs will only get all cell data that are not empty from a named range
var randomstuffs = [].concat.apply([], SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getValues()).filter(String);
var randomstuff = randomstuffs[Math.floor(Math.random()*randomstuffs.length)];
return randomstuff;
}
样本结果
在列a上创建了一个名为rangeTestRange
的示例,其中包含21个数据单元,然后尝试了返回随机单元值的自定义函数=t函数(“TestRange”)
命名范围都是单列。我已经添加了.getValues(),但它仍然会给我一些错误,这可以根据需要工作。