一点点…我目前正在使用以下脚本在单元格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)
})
}