分享

WPS JS宏表格定位实例

 优美的代码 2023-04-30 发布于广东

工具软件:WPS JS宏编辑器

实例功能:

给你这样的功课表,将各位老师的功课定位到任课情况中去。

 任课情况表:

 本实例的定位要实现将功课表的各教师任教情况定位到表中,实现上有一定的难度。

代码实现思路:

1、先对工作表功课表区域行进行合并处理!

for (var Rng1 of arr=Sheets("合并处理").Range("e2:e20"))

 2、对合并的行数组,进行每个单元格合并

for (var Rng of Sheets("合并处理").Range(Cells(2,2),Cells(82,2))){
        var name=Rng.Value();

3、 由于填写其他表格的需要,所以对任教年级与课程内容也进行了合并!并且对重复的内容行了去重操作。

function 合并区域单元格(){
	
	for (var Rng1 of arr=Sheets("合并处理").Range("e2:e20")){                         //修改处Range("d2:d20")
		var arr1=[];
	    var arr2=[];
	    var arr3=[];
		for (var Rng of Sheets("合并处理").Range(Cells(2,2),Cells(82,2))){
		var name=Rng.Value();
		
		if(name.indexOf(Rng1.Value())>-1){
			var grades=Sheets("合并处理").Range(Cells(Rng.Row,3),Cells(Rng.Row,3)).Value();
			var curriculum=Sheets("合并处理").Range(Cells(Rng.Row,4),Cells(Rng.Row,4)).Value();	
			arr1.push(grades);
			arr2.push(curriculum);
			arr3.push(grades+curriculum);	                  
		}	
	}
	      var DateArr=[...new Set(arr1)].join("、");
		  var newarr=[...new Set(arr2)].join("、");
		  
		  Sheets("合并处理").Cells(Rng1.Row,6).Value2=DateArr+newarr; 
		  Sheets("合并处理").Cells(Rng1.Row,7).Value2=[...arr3].join("、"); 	   
}
}

4、循环的顺序要与单元格一一对应,此处比较难。

 function CommandButton1_Click(){
	//Sheets("任课情况表一").Range("F6:AI24").Select();
	//Selection;                                                                      //清空统计区域
                                                    
for (var Rng1 of Sheets("任课情况表一").Range("b6:b24")){                                      //获取统计单元格区域
 var	Num=1
 var   NumA=1
 var   NumB=1
  while(NumB<7){                                                                         //循环6次
 	for (var Rng of Sheets("功课表格式一").Range(Cells(3+NumB,2),Cells(3+NumB,36))){           //用for循环遍历获取每次循环的单元格区域的数组Cells(行,列)
 		                                                                                 //,Range(Cells(4,2),Cells(4,32))等价于Range("b4:aj4")
  	var name=Rng.Value();                                                                //每次获得单元格值赋给变量name
  	if(name.indexOf(Rng1.Value())>-1){                                                   //用indexof方法判断搜索字符是否存在
   		var NumA=Num%5                                                                   //求获得单元的位置的余数作为定位标准
		if(NumA==0){                                                                     //单元定位不能为0赋为5
			NumA=5
		}
    Sheets("任课情况表一").Cells(Rng1.Row,6*NumA+NumB-1).Value2="0"                            //获得定位的单元格写入指定数据 Rng1.Column
   }  
    Num++ 
   
 }   
    NumB++
  }
}	
}

5、使用重新构造集合set()的方法去重。

function test(){
	var arr=Sheets("去重处理").Range("a1:a240").Value();            //修改处Range("a1:a240")
	var DateArr=[...new Set(arr.map(ar=>ar[0]))];
	var NewArr=DateArr.map(d=>arr.find(ar=>ar[0]==d));
	Range("g2").Resize(NewArr.length,NewArr[0].length).Value2=NewArr;
	
}

6、不同表格内容的单元格去重。

function test2()
{
	i=40                                                                                      //修改处i=功课表区域列数
for (var Rng1 of Sheets("任课情况表二").Range("b6:b24")){                                      //获取统计单元格区域修改处Range("b6:b24")
	Num=1
    NumA=1
    NumB=1
  while(NumB<i+1){    	                                                                    //循环6次
	for (var Rng of Sheets("功课表格式二").Range(Cells(4,NumB+1),Cells(9,NumB+1))){           //用for循环遍历获取每次循环的单元格区域的数组Cells(行,列)    	                                                                             //,Range(Cells(4,2),Cells(4,32))等价于Range("b4:aj4")
 	var name=Rng.Value();                                                                //每次获得单元格值赋给变量name
  	if(name.indexOf(Rng1.Value())>-1){                                                   //用indexof方法判断搜索字符是否存在
   		var NumA=Num%6                                                                   //求获得单元的位置的余数作为定位标准
		if(NumA==0){                                                                     //单元定位不能为0赋为5
			NumA=6
	}
	
	
    Sheets("任课情况表二").Cells(Rng1.Row,5+NumA+Math.trunc((NumB-1)/(i/5))*6).Value2="0" 
   }  
    Num++ 
 }   
    NumB++
  }
}	
}

7、表格的对应顺序比较难操作,经过多次调试才完成。



    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多