例题描述
Excel文件kucun.xlsx中有下图所示的数据:
总库存是在仓库里面盘点出来的所有库存,并按地点和库存地点表示存货所在位置,其中委托加工库存是接收的外部公司加工的存货,不属于公司所有。现在要对按总库存表格式,减掉已知的委托加工库存数量,显示属于本公司库存的位置,减去规则如下图所示:
最后实际库存结果如下图所示:
此题涉及数据表关联(join连接)、分组、组内迭代等知识。
实现步骤
1、 编写脚本:
A | |
1 | =file("E:/kucun/kucun.xlsx").xlsimport@t(;"总库存") |
2 | =file("E:/kucun/kucun.xlsx").xlsimport@t(;"委托加工库存").keys(货号) |
3 | =A1.join(商品编码,A2,数量:委托数量) |
4 | =A3.group(商品编码).(~.iterate((a=min(数量,~~),数量-=a,~~-a),委托数量,~~==0)) |
5 | =A3.select(数量>0).new(商品编码,地点,库存地点,数量,小类,大类) |
6 | =file("E:/kucun/kucun.xlsx").xlsexport@ta(A5;"实际库存") |
A1 读取kucun.xlsx文件中的总库存数据
A2 读取kucun.xlsx文件中的委托加工库存数据,并指定货号为主键
A3 将A1按照商品编码与A2的主键货号进行join连接,并连接A2中的数量列重命名为委托数量
A4 将A3按商品编码进行分组后循环各组,在组内进行iterate循环迭代处理,循环中~~代表上次迭代运行的结果,用委托数量作为~~的初始值。取当前记录的数量与~~的最小值赋给变量a,当前记录的数量减去a,用~~-a作为本次迭代的结果;当迭代结果~~为0时,结束迭代。
A5 选出迭代处理后的A3中数量>0的记录,并取出商品编码,地点,库存地点,数量,小类,大类几列构成新的数据集
A6 把A5导出到kucun.xlsx中的实际库存Sheet,选项@t表示首行输出列标题,a表示追加导出Sheet
2、 运行程序,结束后再打开kucun.xlsx就可以看到实际库存Sheet中的数据。