利用JSA对WPS表格进行分组汇总

其实这个问题和昨天所说的《利用JSA对WPS表格进行分类汇总》是一回事,只不过更通用一些。
我知道现在越来越多的企业都在使用WPS,越来越多的人也在使用WPS,这从侧面也说明了我们国产的WPS变得越来越好,所以有必要把这个问题更进一步,说得更清楚一些。
正好春节期间,一个粉丝和我聊天,说我大过年还坚持更新。我告诉他:我写公众号的最终目的是为了解决一些人的问题,只要有一个人看,只要有一个人从中获得了对自己有用的东西,我觉得就有必要写下去。因为我相信,我碰到的一些问题,其他人也会碰到。
还是按照我以往的方式,以个人的风格来进行说明。我不太喜欢通过AI来完成这样的内容,毕竟AI只是辅助,通过AI写出来的东西可谓是又臭又长,与人类的思维差得太远。
测试数据:
为了更好地说明问题,我故意弄了个同名同姓的人,即“王朝”,但是他们不是一个销售部门的,一个是销售一部,一个是销售五部。

测试需求:
按照姓名和部门对销售额进行汇总,如下图中红色箭头右边的结果。

测试代码:
这里我们采取三种方法来进行解决。
方法一:使用Map
function test1(){const arr = Range('A1:C11')()const header = arr.shift()const write = (addr,x) => Range(addr).Resize(x.length,x[0].length).Value2 = x{let map = new Map()arr.forEach(([a,b,c]) =>{let k = a + '|' + bmap.has(k) || map.set(k,[a,b,0])map.get(k)[2] += c})let res =[header, ... map.values()]write('F1',res)}}
方法二:使用Object
function test2(){const arr = Range('A1:C11')()const header = arr.shift()const write = (addr,x) => Range(addr).Resize(x.length,x[0].length).Value2 = x{let obj = { header }arr.forEach(([a,b,c]) => {let k = a + '|' + bobj[k] ??= [a,b,0]obj[k][2] += c})let res = Object.values(obj)write('F1',res)}}
方法三:数组当字典用
function test3(){const arr = Range('A1:C11')()const header = arr.shift()const write = (addr,x) => Range(addr).Resize(x.length,x[0].length).Value2 = x{let res = arr.reduce((x,[a,b,c]) => {let k = a + '|' + blet i = x[k] ??= x.push([a,b,0]) - 1x[i][2] += creturn x},[header])write('F1',res)}}
今天的分享就到这儿啦,非常感谢您对“Python SQL审天下”公众号的关注和点赞。如果您觉得我的公众号能给您带来一丝丝的收获,请多多转发给您的朋友圈,让更多的人看到并了解。也许您不经意间的点赞和转发,会给他人带来独特的体验和感受。
夜雨聆风
