提取 Excel 重复单元格片区

 

Excel文件中,一条数据记录分布在一片区域中,我们称这个区域为片区。

重复单元格片区,就是文件中有很多个数据记录片区,每个片区的格式和大小完全相同,它们按规律重复出现。提取这种数据记录,需要找到片区重复出现的规律,按规律循环每个片区。在片区内部,要找到需提取数据在片区内的分布规律,准确计算出单元格名称或所在行列号,然后用SPL中的xlscell函数读取单元格值。

 

举例

员工信息表employee.xlsx中部分数据如下图所示,每个员工信息片区占97列,在纵向重复出现。

..

现在需要提取每个员工的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   创建列名分别为IDNameSexPositionBirthdayPhoneAddressPostCode的序表来保存提取的数据

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,读取下一片区员工信息