将多个结构相同的工作表合并为一个工作表
例题描述和简单分析
在 xlsx 目录下有多个 Excel 文件(工作表),每个工作表有多个 sheet 页,但所有的 Excel 文件(工作表)结构相同,如下:
book1.xlsx—sheet1:
id |
name |
1 |
Jack |
2 |
Tom |
3 |
Jerry |
book1.xlsx—sheet2:
id1 |
name1 |
10 |
Frank |
11 |
Lucy |
12 |
Alice |
book2.xlsx—sheet1:
id |
name |
4 |
James |
5 |
Danny |
6 |
Lion |
book2.xlsx—sheet2:
id1 |
name1 |
13 |
Terry |
14 |
May |
15 |
test |
需要将这些 Excel 文件(工作表)合并为一个 Excel 文件(工作表),如下:
result.xlsx—sheet1
id |
name |
1 |
Jack |
2 |
Tom |
3 |
Jerry |
4 |
James |
5 |
Danny |
6 |
Lion |
result.xlsx—sheet2
id1 |
name1 |
10 |
Frank |
11 |
Lucy |
12 |
Alice |
13 |
Terry |
14 |
May |
15 |
test |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
B |
C |
D |
|
1 |
=directory@p("xlsx/") |
|||
2 |
for A1 |
=file(A2).xlsopen() |
||
3 |
for B2 |
=file(A2).xlsimport@t(;B3.stname) |
||
4 |
if #A2==1 |
=file("result.xlsx").xlsexport@at(C3;B3.stname) |
||
5 |
else |
=file("result.xlsx").xlsexport@a(C3;B3.stname) |
简要说明:
A1 读取xlsx路径下的所有文件名
A2 循环 A1
B2 返回 A2 文件名对应的工作表的 stname(sheet 页名),nrows(行数),ncols(列数)三个属性
B3 循环 B2
C3 读取 A2 文件名对应的工作表的 B3.stname 的 sheet 页内容
C4、D4 若 A2 的循环次数为 1,则将 C3 的内容导出至 result.xlsx 的 B3.stname 的 sheet 页中。@t 表示导出时包含表头,@a 表示追加方式导出
C5、D5 若 A2 的循环次数不为 1,则将 C3 的内容导出至 result.xlsx 的 B3.stname 的 sheet 页中。@a 表示追加方式导出
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
英文版