|
本帖最后由 xsg123456 于 2024-2-1 15:48 编辑
- function main(){
- //主程序
- let files = ["语文","数学","英语"]
- let data = sjqx(files).map(v=>(v.splice(4,1),v))
- data.unshift(["学号","姓名","得分","座号","科目"])
- let res = flhz(data)
- Range("a1").ClearContents()
- Range("a1").Resize(res.length,res[0].length).Value2 = res
-
- }
- function flhz(data){
- //分类汇总
- let [rowN,colN,row,col,res] = [0,0,{},{},[]]
- data.forEach((cur) =>{
- if(!row[cur[1]]){
- row[cur[1]] = rowN ++
- res.push([cur[0],cur[1],cur[3]])
- }
- if(!col[cur[4]]) {
- col[cur[4]] = 3 + colN ++
- res[0][col[cur[4]]] = cur[4]
- res[row[cur[1]]][col[cur[4]]]= cur[2]
- } else{
- res[row[cur[1]]][col[cur[4]]]= cur[2]
- }
-
- })
- res = res.map(v=>(v[3]=v[6]+v[4]+v[5],v)).sort((a,b)=>b[3]-a[3])
- return res
- }
- function readLine(arr){
- //一行重复数据切割
- let tmp = []
- while(arr.length>0){
- if (arr.length>5) {
- tmp.push(arr.splice(0,5))
- }else{
- tmp.push(arr.splice(0))
- }
- }
- return tmp
- }
- function sjqx(files){
- //数据清洗
- let path = ThisWorkbook.Path
- let data =[]
- files.forEach(name =>{
- let wb = Application.Workbooks.Open( path + `\\${name}.xlsx`)
- let tmp = wb.Sheets("Sheet1").Range("a2").CurrentRegion.Value2.slice(1)
- tmp = tmp.map(v => readLine(v)).flat().filter(v => v[0])
- tmp = tmp.map (v => [...v,name])
- data.push(...tmp)
- wb.Close()
- })
- return data
- }
复制代码
|
|