横向扩展出多组 N 列
举例
Excel文件book1.xlsx中有某浴室某日顾客进出时间登记表,部分数据如下图所示:
现在要统计从18:00到22:00间每小时时间段内的顾客情况,此时间段内某顾客还在则填1,否则不填,如下图所示:
编写SPL脚本:
A |
|
1 |
=file("e:/work/book1.xlsx").xlsopen() |
2 |
=A1.xlsimport@t(Name,Sex,Enter,Leave;,2) |
3 |
=create(${(["Male","Female"]*4).string()}) |
4 |
=time("18:00","HH:mm") |
5 |
=A2.run(A3.insert(0),4.run(t1=elapse@s(A4,(~-1)*3600),t2=elapse@s(A4,~*3600),k=if(A2.Sex=="M",~*2-1,~*2),if(time(A2.Enter)<t2 && time(A2.Leave)>t1,A3(A2.#).field(k,1)))) |
6 |
=A1.xlscell("F3",1;A3.export()) |
7 |
=file("e:/work/book1.xlsx").xlswrite(A1) |
A1 打开book1.xlsx文件为Excel对象
A2 从A1的第一个Sheet中读入Name,Sex,Enter,Leave四列数据,从第2行开始读,选项@t表示读入的第1行为列标题
A3 创建由4组Male,Female列组成的序表
A4 开始时间18:00
A5 循环A2的每一行,在A3中追加一条新记录,循环4个时间段,算出本时段开始时间t1和结束时间t2,根据顾客性别算出要填写的字段序号k,如果顾客本时段还在浴室内,则在A3的当前行第k个字段填写1
A6 在A1的第1个Sheet的F3单元格填写A3序表转成的字符串,会依次把A3中的单元格数据填入Excel中F3的后续单元格中。
A7 将A1的Excel对象保存到文件book1.xlsx
这个案例中的 SPL 脚本存在以下问题,烦请小编核实:
1、A3 中的语法,序列.string()和 create(${“[a,b,c…]”}) 现在是不是不适用了?A3 没有测试出结果来。
2、A5 中 A2.Leave 和 A2.Enter 从 excel 读取进来之后会变成小数,time(小数) 这个语法是不是也不适用?A5 也没有测试出结果。
3、这个案例跟以下案例重复了,但写法不一样 14.10 横向扩展出多组 N 列