Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google Sheets应用程序脚本,从命名范围返回随机项_Google Apps Script_Google Sheets - Fatal编程技术网

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上创建了一个名为range
TestRange
的示例,其中包含21个数据单元,然后尝试了返回随机单元值的自定义函数
=t函数(“TestRange”)


命名范围都是单列。我已经添加了.getValues(),但它仍然会给我一些错误,这可以根据需要工作。