|
JS代码,供参考
- function 抽签100米(){
- let rng=Cells.Find("100米");
- 比赛抽签(rng);
- }
- function 抽签200米(){
- let rng=Cells.Find("200米");
- 比赛抽签(rng);
- }
- function 抽签300米(){
- let rng=Cells.Find("300米");
- 比赛抽签(rng);
- }
- function 比赛抽签(rng){
- let sf=Range("k7").CurrentRegion.Value2.slice(1 ).reduce((sf,x,i,ar)=>{
- if (x[2]==null) x[2]=ar[i-1][2];
- return sf[x[1]]=x[2], sf;
- },{});
- let n=Math.ceil(Object.keys(sf).length/7), obj={}, dic={};
- for (let i=0;i<=n-1;i++){
- let count=Math.min(7,Object.keys(sf).length); //剩余未分组的队员数量
- for (j=1;j<=count;j++){
- let temp1=obj[j]=obj[j] || Array(n).fill([""]); //二维数组
- let temp2=dic[j]=dic[j] || []; //记录本组参赛队所属省分
- let dy=Object.entries(sf).filter(([a,b])=>!temp2.includes(b));
- if (dy.length==0) dy=Object.entries(sf);
- let k=Math.floor(Math.random()*dy.length); //随机号码
- temp1[i]=[dy[k][0]], temp2.push(dy[k][1]);
- delete sf[dy[k][0]]; //删除已被抽中参赛队
- }
- }
- let res=Object.values(obj).flat();
- rng.Offset(1,0).Resize(res.length,res[0].length).Value2=res;
- }
复制代码 |
|