一点点…我目前正在使用以下脚本在单元格I6:M6中生成1到200之间的随机数。出于我的预期目的,该脚本有两个问题(虽然都不是主要问题,但我想要一些“抛光”功能)。

问题1)不是互斥的。这是最大的问题,因为五个数字中的每个数字必须唯一。重复执行的可能性不大,但是一旦发生确实很烦人。

问题2)我完全不知道如何或是否有可能生成这些随机数,然后按数字顺序放置到I6:M6中,I6是最小的。

我是一个完全的业余爱好者和JavaScript(以及其他任何代码),但我只能从其他地方找到的信息中解决这些问题,但是我对它的工作原理却含糊不清。

///////////////////////////////////////

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [ {name:"Roll Dice",functionName:"rollDice"} ];
  sheet.addMenu("Script", entries);
};

function rollDice() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("sheet1 (New)");
    var cell = sheet.getRange("I6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("J6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("K6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("L6");
  cell.setValue( Math.floor((Math.random()*200)+1) );
    var cell = sheet.getRange("M6");
  cell.setValue( Math.floor((Math.random()*200)+1) );

};

///////////////////////////////////////

最佳答案

我在mainLoop函数中添加了一个排序函数,现在应该按数字排序。

function myFunction() {
  mainLoop()
}

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("sheet1");

function generateNumber(){
return Math.floor((Math.random()*200)+1)
}

function setValue(_val, _address){
   var cell =  sheet.getRange(_address)
   cell.setValue(_val)
}

function generate(){
  var array = []
  while(array.length<5){
    var rand = generateNumber()
    var isUnique = array.indexOf(rand) === -1
    if(isUnique){
      array.push(generateNumber())
    }

  }
  return array
}

function mainLoop(){
    var array = generate()
      array.sort(function(a, b) {
  return a - b;
});
    var addresses = ['I6','J6','K6','L6','M6']
    addresses.forEach(function (_address,_index){
        setValue(array[_index],_address)
    })
}

09-25 17:24