WPS JS宏年级全体学生各科目成绩汇总

需求

一、8个考场共416名考生参考,每个考场有:语文、数学、英语、政治、历史、地理、生物,共计7个科目的成绩表

二、按照考号汇总每个考生7个科目的考试成绩

每个考场每个科目的每个考生的成绩表格式

汇总完成效果

WPS JS代码实现过程

function CommandButton1_Click() {
	Application.ScreenUpdating = false
	
	//获取文件路径
	let suffix = 'Excel Files(*.xls;*.xlsx;*.csv), *.xls;*.xlsx;*.csv';
    let pths = Application.GetOpenFilename(suffix, 1, '可选多个文件', undefined, true);
	if (!pths) return Columns('A:M').ClearContents()
	
	//获取时间戳,记录程序运行时间
	let start = Date.now()
	
	//获取每个学生各科目的成绩汇总数据
	let data = getSubjectSplit(pths)
	let ros = data.length + 1
	
	//写入数据
    Columns('A:M').ClearContents()
    Range('A2').Resize(data.length, data[0].length).Value2 = data
    Range('M2').Value2 = '总分'
    Range('M3').Formula = '=SUM(D3:L3)'
    Range('M3:M' + ros).FillDown()
    Range('M3:M' + ros).Value2 = Range('M3:M' + ros).Value2
	
	Application.ScreenUpdating = true
	let end = (Date.now() - start) / 1000
	alert('完成,用时:' + end + 's')
}

//按考号分类汇总各科目成绩
function getSubjectSplit(pths) {
    const obj = {}
    pths.forEach(pth => {
        let wb = Workbooks.Open(pth) //打开工作簿
        let data = wb.ActiveSheet.Range('A1').CurrentRegion.Value2 //获取数据
        let subject = data[0][4] //科目
        data.shift() //去表头
        wb.Close()
		
		//按考号分类汇总各科目成绩
        data.forEach(i => {
            let num = i[0] //考号
            if (obj[num]) {
				obj[num][subject] = i[4] //记录对应科目的分数
				
            } else {
            	obj[num] = {}
            	obj[num]['考号'] = i[0]
                obj[num]['班级'] = i[1]
                obj[num]['姓名'] = i[3]
                obj[num][subject] = i[4]
            }
        })

    })
    
    const data = [['考号', '班级', '姓名', '语文', '数学', '英语', '政治', '历史', '地理', '生物', '物理', '化学']] //定义表头
    for (let o in obj) {
    	let arr = []
    	data[0].forEach(i => arr.push(obj[o][i]))
    	data.push(arr)
    }
    
	return data
}

动图效果

示例文件地址

WPSJS宏年级全体学生各科目成绩汇总工具资源-CSDN文库

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Excel效率人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值