如何处理巨大的 xls 文件

面对巨大的xls文件,Excel软件的性能表现很差。通常我们会想到把xls的数据放到数据库,借助数据库的计算能力来处理数据。但是有些时候,可能因为各种原因,无法导入数据库。是否有可以直接对巨大的xls文件进行数据处理的软件呢?

 

例如,有员工信息文件emp.xls,部分数据如下:

EID

NAME

SURNAME

GENDER

STATE

BIRTHDAY

HIREDATE

DEPT

SALARY

1

Rebecca

Moore

F

California

1974-11-20

2005-03-11

R&D

7000

2

Ashley

Wilson

F

New York

1980-07-19

2008-03-16

Finance

11000

3

Rachel

Johnson

F

New Mexico

1970-12-17

2010-12-01

Sales

9000

4

Emily

Smith

F

Texas

1985-03-07

2006-08-15

HR

7000

有州信息文件states.xls,部分数据如下:

STATEID

NAME

POPULATION

ABBR

AREA

CAPITAL

REGIONID

1

Alabama

4779736

AL

52419

Montgomery

6

2

Alaska

710231

AK

663267

Juneau

9

3

Arizona

6392017

AZ

113998

Phoenix

8

4

Arkansas

2915918

AR

52897

Little Rock

7

现需要将两份数据,通过empSTATE列和statesNAME列关联,并筛选工资大于5000,且人口小于500万的记录结果。

 

借助集算器可以很方便地完成件事。
集算器安装包可去润乾网站载集算器职场版,运行需要一个授,免版本就用。

1.     过滤出州信息数据中,人口小于100万的记录:

在集算器中编写脚本wherexls.dfx


A

1

$select * from states.xls where POPULATION<1000000

A1使用简单SQL,过滤出人口小于100万的记录

执行后,A1中的结果如下:

 

2.     对员工信息数据,按性别分组,统计人数:

在集算器中编写脚本groupxls.dfx


A

1

$select GENDER,count(*) as count from emp.xls group by GENDER

A1   使用简单SQL,按性别分组,统计人数

执行后,A1中的结果如下:

 

3.     连接员工信息与州信息数据,按员工信息中的STATE与州信息中的NAME关联,并过滤所在州人口小于500 万,员工工资大于5000的记录:

在集算器中编写脚本joinxls.dfx


A

1

$select * from emp.xls b join states.xls a on a.NAME=b.STATE where a.POPULATION<5000000 and b.SALARY >5000

A1   使用简单SQL完成两份数据的关联过滤运算

执行后,A1中的结果如下:

 

还可以将xls文件转为集文件,集文件是集算器内置的二进制文件格式,采用了简单压缩机制,相同数据量比数据库的占用空间会更小,所以读取文件的时间也就更少。

例如,现有订单表文件orders.xls,需要转为集文件,脚本如下:


A

1

=file("orders.xls").xlsimport@t()

2

=file("orders.btx").export@b(A1)

转为集文件后,两者占用硬盘空间对比如下:

集文件也可以像Excel文件一样,使用集算器进行数据处理,例如:

对订单文件orders.btx,按年份分组,统计订单个数小于1万的结果:

在集算器中编写脚本groupbtx.dfx


A

1

$select year(O_ORDERDATE) as year,count(*) as count from orders.btx group by year(O_ORDERDATE) having count(*)<10000

A1   使用简单SQL,按年份分组,统计订单个数

执行后,A1中的结果如下: