写个给你看看行不行
- function test2(){
- //单价查询字典
- let dicPrice = Sheets("出库明细").Range("j1").CurrentRegion.Value2.reduce((p,[type,price])=>(p[type] = price ,p),{})
- //出库明细循环
- let dicType = Sheets("出库明细").Range("a1").CurrentRegion.Value2.slice(1).reduce((p,[ , type , t , s])=>{
- let price =dicPrice[type]
- if(price){
- p[type] ||= {}; p[type].学生 ||= null; p[type].教师 ||= null;
- p.合计 ||= {} ; p.合计.学生 ||= null; p.合计.教师 ||= null;
- p[type].学生 = s ? p[type].学生 + s : p[type].学生 ;
- p[type].教师 = t ? p[type].教师 + t : p[type].教师 ;
- p.合计.学生 = s ? p.合计.学生 + s * price : p.合计.学生;
- p.合计.教师 = t ? p.合计.教师 + t * price : p.合计.教师;
- }else{
- throw new Error(`\n\n${type}没有价格,程序退出!\n\n`)//当品种没有价格的时候,程序报错退出
- }
- return p
- },{})
- let res = []
- for(let type in dicType){
- let t = dicType[type] , price =dicPrice[type];
- if (type != "合计") res.push([type,t.学生, t.学生 ? price : null, t.学生 ? t.学生*price : null,
- t.教师, t.教师 ? price : null ,t.教师 ? t.教师*price : null,
- t.学生 + t.教师, (t.学生 + t.教师) ? price : null,t.学生*price + t.教师*price
- ])
- }
- res.push(["合计",null,null,dicType.合计.学生,null,null,dicType.合计.教师,null,null, dicType.合计.学生 + dicType.合计.教师])
- Sheets("出库汇总").Range("a4").Resize(res.length,res[0].length).Value2 = res
- }
复制代码
|