乐趣区

关于excel:Excel-文件结构化解析示例

【摘要】

本文介绍如何将各种构造的 Excel 文件解析成结构化数据,如一般行式、简单表头、自在格局、穿插表、奴才表、大文件等,并用 esProc SPL 举例实现。请点击 Excel 文件结构化解析示例理解详情

本文将介绍如何进行各种格局的 Excel 文件结构化解析,如一般行式、简单表头、自在格局、穿插表、奴才表、大文件等,并提供用 esProc SPL 编写的代码示例。esProc 是业余的数据计算引擎,其采纳的 SPL 中有欠缺的 Excel 文件处理函数,进行结构化解析及后续的计算、入库等操作十分不便。

1. 一般行式

这是一种最简略的文件格式,文件中每行都是一条数据记录,更常见的是第一行是列题目。

示例:在学生问题文件 scores.xlsx 中,查问各班语文均匀问题。局部数据如下图:

esProc SPL 脚本如下:

2. 简单表头

少数时候,Excel 文件的表头格局并不简略,往往是由多行形成的,比方有表题目、项目名称、填表人、填写日期、页码等信息。解析这种格局的文件时,须要跳过简单的表头,指定从数据行的地位开始读取,而后指定结构化后的数据各列的列名。

示例:在我的项目造价文件 itemPrices.xlsx 中,计算我的项目总造价,局部数据如下图:

esProc SPL 脚本如下:

3. 自在格局

一条数据记录扩散在多行,字段列值单元格紧跟在列名单元格前面或上面,可能有跨列或跨行的合并单元格。但每条记录所占的行数以及对应行构造是雷同的。循环读取时要以每条记录所占行数为单位组成一条记录。

示例:把自在格局的员工信息文件 employee.xlsx 存入到数据库表 employee 中,局部数据如下图:

esProc SPL 脚本如下:

A1 创立列名为“ID、Name、Sex、Position、Birthday、Phone、Address、PostCode”的空序表

A2 关上 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。$\\[A2.xlscell(\\] 与 ”A2.xlscell(“ 雷同,都是示意一个字符串,它的益处是在 IDE 中编写程序时,如果 A2 单元格的编号产生了变动,$\[A2.xlscell(\] 中的 A2 会主动变动,比方在 A2 前插入了一行,这个表达式就会变成 $\[A3.xlscell(\],而用引号的话,就不会主动变了。

B5 判断雇员 ID 值是否为空,为空则退出循环,完结读数

B6 将一条雇员信息存入 A1 序表尾

B7 让雇员信息的行号序列都加上 9,读取下一条雇员信息

A8-A10 连贯数据库,将雇员信息存入数据库表 employee,敞开数据库

读取进去的 A1 单元格数据如下图所示:

4. 穿插表

穿插表是统计学中常见的一种矩阵式表格,能够清晰地表白两个变量间的数量关系。穿插表数据逐行读入后,须要以某个列变量为基准,另一个变量及穿插值进行行转置;或者以某个行变量为基准,另一个变量及穿插值进行列转置。

示例:将订单地区与货运形式穿插表 cross.xlsx 文件解析成结构化数据,文件数据如下图所示。

esProc SPL 脚本如下:

A3 格的局部数据如下图所示:

5. 奴才表

每个 sheet 是一条主表记录,同时 sheet 中也蕴含 N 条子表记录。文件中有多少主表记录,就有多少个 sheet。对这种奴才表构造的数据,须要创立两个数据表别离保留主表和子表的记录。

示例:在员工信息登记表文件 staff.xlsx 中,每个 sheet 有员工信息及他的家庭成员信息,请将员工信息及家庭成员信息别离解析成两个结构化数据表。其中一个 sheet 如下图:

esProc SPL 脚本如下:

A1 创立列名别离为 IDCard、Name、Sex、Birthday、Nation、Phone、Depart、Home、Marital、Entry 的空序表,用于保留主表员工信息

A2 创立列名别离为 IDCard、Name、Relation、Workplace、Phone 的空序表,用于保留子表员工家庭成员信息

A3 定义主表员工信息所在单元格序列

A4 关上 Excel 数据文件

A5 循环读取 Excel 文件各 sheet 数据

B5 读取员工信息序列

C5 将 B5 读取的员工信息保留到序表 A1

B6 从第 6 行开始读取员工家庭成员信息,只读指定的 5 列 Family、Name、Relation、Workplace、Phone

B7 将 B6 序表的 Family 列改名为 IDCard

C7 为 B7 序表的 IDCard 列赋值为员工信息中的 IDCard

B8 将 B7 中的员工家庭成员信息追加到序表 A2

A1 读到的局部数据如下:

A2 读到的局部数据如下:

6. 大文件

大文件结构化解析及计算的相干原理可参看《大文件上的结构化数据计算示例》,那篇文章是以文本文件为例,本文在此以 Excel 文件为例再作示范。

示例:在订单信息大数据文件 orders.xlsx 中,统计各地区的订单金额总和。局部数据如下图:

esProc SPL 脚本如下:

退出移动版