提取 Excel 重复单元格片区
在Excel文件中,一条数据记录分布在一片区域中,我们称这个区域为片区。
重复单元格片区,就是文件中有很多个数据记录片区,每个片区的格式和大小完全相同,它们按规律重复出现。提取这种数据记录,需要找到片区重复出现的规律,按规律循环每个片区。在片区内部,要找到需提取数据在片区内的分布规律,准确计算出单元格名称或所在行列号,然后用SPL中的xlscell函数读取单元格值。
举例
员工信息表employee.xlsx中部分数据如下图所示,每个员工信息片区占9行7列,在纵向重复出现。
现在需要提取每个员工的ID,Name,Sex,Position,Birthday,Phone,Address,PostCode等信息构成数据集。
编写SPL脚本:
A |
B |
C |
|
1 |
=create(ID,Name,Sex,Position,Birthday,Phone,Address,PostCode) |
||
2 |
=file("E:/work/employee.xlsx").xlsopen() |
||
3 |
[C,C,F,C,C,D,C,C] |
[1,2,2,3,4,5,7,8] |
|
4 |
for |
=A3.(~/B3(#)).(A2.xlscell(~)) |
|
5 |
if B4(1)=="" |
break |
|
6 |
>A1.record(B4) |
||
7 |
>B3=B3.(~+9) |
A1 创建列名分别为ID、Name、Sex、Position、Birthday、Phone、Address、PostCode的序表来保存提取的数据
A2 打开employee.xlsx文件为Excel对象
A3 定义员工信息所在单元格列号序列
B3 定义员工信息所在单元格行号序列
A4 用for循环读取每个片区员工信息
B4 A3.(~/B3(#))先算出当前员工信息单元格位置序列,再读出这些单元格值组成员工信息序列。第一次循环时为[C1,C2,F2,C3,C4,D5,C7,C8],第二次循环时为[C10,C11,F11,C12,C13,D14,C16,C17]……,每次循环后行号加9。
B5 判断员工ID值是否为空,为空则退出循环,结束运行
B6 将一条员工信息追加到A1序表尾部
B7 让员工信息的行号序列都加上9,读取下一片区员工信息