|
JS代码,这个问题还挺麻烦的
- function 考场安排(){
- const arr=Sheets.Item("考场号和座位号安排").Range("a1").CurrentRegion.Value2;
- let obj={};
- let st=arr.slice(1).reduce((st,[,a,b],i)=>{
- return obj[a]=i+1, st.add(b), st;
- },new Set());
- st.forEach(kd=>{
- let ksarr=arr.filter(([,,b])=>b==kd); //筛选点的考生
- let ksct=Math.ceil(ksarr.length/30);
- let dic={};
- for (let k=1;k<=ksct;k++){
- let temp=[[`第${k}考场考试座位安排表`],["前门","讲台"],...Array.from(Array(7),x=>Array(4)),["后门","",,,]];
- let zw=0;
- for (let j=3;j>=0;j--){
- for (let i=2;i<=9;i++){
- if (ksarr.length!=0 && temp[i][j]==null){
- let n=parseInt(Math.random()*ksarr.length); //随机抽取
- temp[i][j]=ksarr.splice(n,1)[0][1];
- let m=obj[temp[i][j]];
- arr[m][3]=`${String(k).padStart(2,0)}${String(++zw).padStart(2,0)}`; //准考证号
- }
- }
- }
- dic[k]=temp;
- }
- Sheets.Add(null,Sheets.Item(Sheets.Count)).Name=kd;
- for (let key in dic){
- let rng=Range("a"+ Rows.Count).End(xlUp);
- rng=rng.Row==1?rng:rng.Offset(2,0);
- let temp=dic[key];
- rng.Resize(10,4).Value2=temp;
- rng.Resize(10,4).HorizontalAlignment=xlHAlignCenter;
- rng.Resize(10,4).Borders.LineStyle=1;
- [[1,1,1,3],[0,0,1,4]].forEach(([a,b,c,d])=>rng.Offset(a,b).Resize(c,d).Merge());
- }
- })
- Sheets.Item("考场号和座位号安排").Range("a1").CurrentRegion.Value2=arr; //填入准考证号
- }
复制代码 |
|