工具软件: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("、");
}
}
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++
}
}
}
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;
}
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++
}
}
}