Java 嵌入 SPL 轻松实现 Excel 文件合并

Java调用SPL轻松实现Excel文件高效合并
本文介绍了如何使用Java嵌入SPL脚本实现Excel文件的高效合并。通过润乾集算器,程序员可以避免使用复杂的POI库,而是编写简单的SPL脚本来合并Excel的多个Sheet或不同文件,同时支持流式处理大文件,减少内存消耗。文章详细展示了各种合并场景的SPL脚本示例,并讨论了如何在Java中调用这些脚本。

大多数JAVA程序猿都选择使用POI或者HSSFWorkbook等第三方类库来实现Excel自动化合并,这样一来不仅需要噼里啪啦的敲好多代码,费事费力,而且用起来灵活度也不高,对Excel的格式要求也很严格。如果能有一个专用的外部数据工具,写简单类似SQL的脚本来实现,然后在JAVA中直接调用并返回结果集,就再好不过了。润乾集算器就是这样的机制,通过使用JDBC调用SPL脚本,使用起来方便快捷,下面就来学习下具体如何使用。

 

SPL实现

常规合并:

A.  同一个 excel 中的多个Sheet表合并

下面的例子是一个包含了销售数据的 excel 文件,其中包含了按月划分的 3 个结构相同的 sheet 工作表,数据如下:

January_2013:

February_2013:

March_2013:

在合并3个Sheet的同时,我们还可以同时从每个sheet中筛选出字段Customer Name, Sale Amount。最后的效果如下:

SPL 脚本:

 

A

1

=file(”D:/sales_2013.xlsx”).xlsopen()

2

=A1.conj(A1.xlsimport@t('Customer Name','Sale   Amount';~.stname))

3

>file(“D:/result_2013.xlsx”).     xlsexport@t(A2;"merge_sheets")

保存脚本文件oneExcel.dfx(嵌入Java会用到)

脚本说明:

A1: 打开指定的 excel 文件,创建一个由多个 sheet 工作表组成的序列。

A2:利用 conj 函数遍历 A1 序列中所有的成员工作表,导入每个工作表中指定列'Customer Name','Sale Amount',并将数据并合并。其中 xlsimport 函数导入指定列,最后一列用分号; 隔开。 参数~.stname表示指定当前工作表,由于在 conj 函数的循环中,所以就可以逐个导入所有工作表。同时,xlsimport 使用选项@t指明将工作表的第一行记录作为字段名。

A3: 将序表 A2 作为一个新的工作表“merge_sheets”保存到原来的 excel 文件中,同样用选项 @t 指明首行记录为标题。

这段脚本只有三句话,短小精干之余,逻辑清晰,也比较容易理解。下面我们再看看如何合并多个文件中的多个工作表。

B.  不同 excel 中的多表合并

下面是要合并的多个 excel 文件,它们都具有和上面例子相同的表结构,每个文件记录了当年的数据
SPL 脚本:

 

A

B

1

for   directory@p(”d:/excel/*.xlsx“)

=file(A1).xlsopen()

2

 

=B1.conj(B1.xlsimport@t('Customer     Name','Sale Amount','Purchase Date';~.stname))

3

 

=@|B2

4

>file(“d:/result.xlsx”).   xlsexport@t(B3;"merge_data")

 

合并后的结果如下:

保存脚本文件MergeExcels.dfx(嵌入Java会用到)

脚本说明:

A1: 通过 for 循环,遍历指定目录下的 excel 文件,在 B1 到 B3 之间进行循环内处理。

B1:打开目录下的一个 excel 文件,生成序列。

B2:导入当前文件中的每个 sheet 工作表中指定列'Customer Name','Sale Amount','Purchase Date'的数据,然后合并这些数据,与前面例子中的 A2 类似。

B3:将序表 B2 的数据与 @表示的本网格的值进行合并。

A4:将序表 B3 保存到result.xlsx文件中的 merge_data 工作表中。

上面程序用两个循环就实现了多个 excel 文件数据合并,外循环 for 遍历了目录下所有的 excel 文件,内循环B1.conj则合并每个excel文件中的多个sheet工作表的数据。

 

C.  合并出大文件

前面第一个例子中的 A2、第二个例子中的 B3 都是在内存中装载了合并后的 Excel 的所有数据,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值