Google apps script 我想编辑一个Google脚本,这样它就可以在特定的工作表中洗牌特定的行
在本文中,我尝试了以下代码:Google apps script 我想编辑一个Google脚本,这样它就可以在特定的工作表中洗牌特定的行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,在本文中,我尝试了以下代码: function shuffleRows() { var ss=SpreadsheetApp.getActive(); var sh=ss.getActiveSheet(); var rg=sh.getDataRange(); var vA=rg.getValues(); var lr=sh.getLastRow(); sheet.sort(function(a,b){return Math.floor(Math.random()*range
function shuffleRows() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
var lr=sh.getLastRow();
sheet.sort(function(a,b){return Math.floor(Math.random()*range)-Math.floor(Math.random()*range);
});
rg.setValues(sheet);
}
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Shuffle ZOO",
functionName : "shuffleRows",
}];
sheet.addMenu("Shuffle ZOO", entries);
};
当需要洗牌整张纸时,它可以很好地工作。但是,我需要脚本来洗牌一个特定的范围,即I2:I8在一个特定的表中,即Ark 5
我想我必须用这些行替换:
var sheet = SpreadsheetApp.getActive().getSheetByName("Ark5");
var range = sheet.getRange("I2:I8");
我需要编辑什么?我终于得到了它,尽管我不确定它是否是最好的解决方案
function shuffleRows() {
// var sheet = SpreadsheetApp.getActive().getSheetByName("Ark5");
// var range = sheet.getRange("I2:I8");
var ss=SpreadsheetApp.getActive().getSheetByName("Ark5");
var sh=ss;
var rg=sh.getRange("I2:I8");
var vA=rg.getValues();
var lr=sh.getLastRow();
vA.sort(function(a,b){return Math.floor(Math.random()*lr)-Math.floor(Math.random()*lr);
});
rg.setValues(vA);
}
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Bland alle dyrene",
functionName : "shuffleRows",
}];
sheet.addMenu("Bland alle dyrene", entries);
};
试试这个:
function runOne(rs,re) {
var rs=rs||2;//row start
var re=re||8;//row end
var ss=SpreadsheetApp.getActive()
var sh=ss.getSheetByName("Ark5");
var rg=sh.getRange(rs,1,re-rs+1,sh.getLastColumn());
var vA=rg.getValues();
var iA=[];//The index array
vA.forEach(function(r,i){iA.push(i)});
var oA=[];
iA.sort(function(a,b){return Math.floor(Math.random()*iA.length)-Math.floor(Math.random()*iA.length);});//apply sort to index array
iA.forEach(function(e,i){oA.push(vA[iA[i]]);});//reposition rows based upon sorted index array
sh.getRange(rs,1,oA.length,oA[0].length).setValues(oA);//post repositioned rows
}
它工作正常,这是不可能的。工作表在ShuffreRows中未定义。我想我必须用这句话来代替,你为什么不试试看呢?@大师我确实试过了,但我一直失败。你这是什么意思?那么我可以优化它吗?我的意思是-我可以阅读,但我不能把它转化为具体的事情。我不能帮你。如果您在实现该算法时遇到了一个特定/焦点问题,请在尝试多次后向提出一个新问题。好的-谢谢。谢谢。它按预期工作,但在我最终得到下面的解决方案的过程中,我需要将数字与某一行中的名称交换,并且仅由一个按钮触发。你确实回答了原来的问题:-知道你用名字交换数字是什么意思,所以当你问这个问题时,请提供一个例子。