【问题标题】:Google Sheets Apps Script, return random item from named rangeGoogle Sheets Apps 脚本,从命名范围返回随机项目
【发布时间】:2021-06-02 23:47:26
【问题描述】:

我正在尝试创建一个自定义函数,我可以将名称范围作为输入,并让它从名称范围中输出一个随机项。我有多个命名范围,因此拥有一个可以用于所有范围的函数会很方便。这就是我要替换的=INDEX(named_range,RANDBETWEEN(1,COUNTA(named_range)),1)

这是我尝试过的,但它不起作用:

function tfunction(n) {
  var randomstuffs = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n);
  var randomstuff = randomstuffs[Math.floor(Math.random()*randomstuffs.length)];
  Logger.log(randomstuff); 
}

提前致谢

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    你可以试试这个编辑过的脚本:

    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 个数据单元格,然后尝试了自定义函数 =tfunction("TestRange"),它返回了一个随机单元格值。

    【讨论】:

      【解决方案2】:

      .getRangeByName() method 返回对范围的引用,而不是范围中的值。您需要在其中添加.getValues()

      var randomstuffs = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(n).getValues();
      

      还请记住,.getValues() method 返回值的二维数组,按行索引,然后按列索引。因此,您的 var randomstuff 声明将需要更改以解决此问题,具体取决于您的范围有多少行和列。

      【讨论】:

      • 命名范围都是单列。我添加了 .getValues() 但它仍然给我错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多