如何将多个不定列的交叉表汇总成分类完全的交叉表
例题描述
Excel文件book1.xlsx中有下图所示的数据,共有4个表格,都是5行5列,2-4列第一行是数字,相当于是纵坐标;各表格第1列的2-4行也是数字,相当于是横坐标。
现在要对表中数据进行汇总,把相同坐标点的数值加起来,然后再把所有横纵坐标及对应的汇总值列出来,如下图所示:
此题涉及读取Excel中局部区域数据、分组汇总、行列转置等知识。
实现步骤
1、 编写脚本:
A |
B |
|
1 |
=file("E:/work/ book1.xlsx") |
|
2 |
for 4 |
>r=(A2-1)\2*7+1 |
3 |
>c=(1-A2%2)*7+1 |
|
4 |
=to(c,c+4).("#"/~).concat(",") |
|
5 |
=A1.xlsimport@t(${B4};1,r:r+4) |
|
6 |
=B5.pivot@r(#1;y,value) |
|
7 |
>B1=B1|B6 |
|
8 |
=B1.groups(#1,y;sum(value):value) |
|
9 |
=A8.pivot(#1;y,value) |
|
10 |
=file("E:/work/book2.xlsx").xlsexport@t(A9) |
A1 定义book1.xlsx文件
A2 循环读取4张表格
B2 计算当前表格的起始行号r
B3 计算当前表格的起始列号c
B4 拼出当前表格所有列号串,如表2的串为#8,#9,#10,#11,#12
B5 从book1.xlsx文件中读出r行到r+4行、B4所指定的列号中的数据,选项@t表示首行是列标题
B6 对读出的表格进行行列转置,选项@r表示是列转行,以第1列为分组,转换后的新列号命名为y和value
B7 转置后的序表都合并保存到B1
A8 对B1中的数据按第1列和y进行分组,计算组中value的总和命名为value列
A9 对A8中分组汇总的数据进行行列转置,以第1列为分组,y的值为新的列名,value值为新的列值
A10 把A9导出到book2.xlsx中,选项@t表示首行输出列标题
2、 运行程序,结束后就可以看到work目录中生成的book2.xlsx文件。
问答搜集 https://stackoverflow.com/questions/63803374/how-can-i-sum-a-series-of-matrices-based-on-the-values-in-the-first-row-and-colu
【附件】 mergecross.zip
英文版