乐于分享
好东西不私藏

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

利用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 + '|' + b 			map.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 + '|' + b			obj[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 + '|' + b 			let i = x[k] ??= x.push([a,b,0]) - 1			x[i][2] += c 			return x		},[header])		write('F1',res)	}}

今天的分享就到这儿啦,非常感谢您对“Python SQL审天下公众号的关注和点赞。如果您觉得我的公众号能给您带来一丝丝的收获,请多多转发给您的朋友圈,让更多的人看到并了解。也许您不经意间的点赞和转发,会给他人带来独特的体验和感受。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 利用JSA对WPS表格进行分组汇总

评论 抢沙发

6 + 2 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮