如何快速合并多个 Excel 文件
N多个Excel如何合并?Excel类型一样,如何合并?合并时有重复的数据怎么办?多个文件数据汇总又如何做?相信很多小伙伴工作中都会碰到类似问题,而又有很大一部分小伙伴面对这些问题会手足无措。表格太多,复制粘贴不可取,PQ不够用,Python又太麻烦,还有更简单、更自动化的方式吗?今天就给大家介绍一款能够处理各种复杂Excel场景的利器SPL,分分钟帮你解决Excel难题。
esProc SPL是一款擅长结构化数据处理的工具,它有丰富的函数,很多复杂的Excel工作,SPL都可以轻松解决。关键的是,虽然它是一门编程语言,但是用起来非常简单,很多用Python或SQL要一堆代码才能解决的问题,SPL几句就搞定了,即使你没有编程基础也能快速入门。而且它还配套有大量的例题,很多时候直接复制例题的代码就能使用。
话不多说,我们直接上例题。
例1:列名列数相同的 Excel 纵向合并
首先来个简单的,有两张Excel表,表的列名列数相同,如下图
合并前:
Fruits.xlsx
和
Meats.xlsx
现需要将其进行纵向合并,如图
合并后:
对于这种字段完全一致的表格,SPL直接用A|B|C的方式就可以解决
实现代码:
A |
|
1 |
=file("Fruits.xlsx").xlsimport@t() |
2 |
=file("Meats.xlsx").xlsimport@t() |
3 |
=A1|A2 |
4 |
=file("Foods.xlsx").xlsexport@t(A3) |
A1和A2表示导入Excle文件
A3 A1|A2就表示把两个表格纵向合并
A4 表示将合并后的结果A3,保存为xlsx文件到指定路径。
SPL的编程方式很友好,就像在Excel里写公式一样,可以用表格名称A1,A2……来引用表格里的数据进行计算。
两个表格合并很简单,那么N多个表格呢
也很简单
例2:N 个列相同的表格纵向合并
首先把要合并的文件放到同一路径下,比如我们把50个文件都放到Fruits文件夹里
然后运行代码:
A |
|
1 |
=directory@p("D:/Fruits/*.xlsx") |
2 |
=A1.conj(T(~)) |
A1 directory有名址录的意思,这个函数在这里就表示列出Fruits文件夹里所有.xlsx文件名目录
A2 表示循环打开A1路径里的文件,然后进行合并。
T()函数相当于例1中file().xlsimport@t()函数,是它的升级函数,表示打开指定路径的文件,而且T()函数还能打开txt,csv,xls等多种格式文件。
A.()是循环函数,A1.(T(~))表示循环A1里的每一个文件路径,并用T()函数打开该文件,~符号表示每一次循环的对象。
循环打开所有文件后,我们还需要把它们合并到一起,因此再加一个conj()函数,表示conjunction的意思。
因此,A2单元里的代码A1.conj(T(~))就表示打开A1里的50个文件,然后进行合并成一个。
只要是字段相同的Excel文件合并,不管多少个,都可以套用这两句代码。
那么,再添加一个需求,我们不仅要合并,还希望知道合并后文件里的每一条数据来自哪个文件。
当然也可以。
例3: 多个文件纵向合并, 文件名转成列值我们希望50个文件合并后添加一个新的列命名为“Category”,表示合并后的每个商品来自哪个文件
合并后:
只需要在例2的代码上进行修改即可
A |
|
1 |
=directory@p("D:/Fruits/*.xlsx") |
2 |
=A1.conj((fn=filename@n(~),T(~).derive(fn:Category))) |
filename@n()表示获取A1路径里的文件名,比如Fruits1,Fruits2
derive()表示对T()函数打开的每个表格添加衍生变量“Category”,衍生变量取值为fn即每个Excel文件的名字
conj()合并的意思,表示所有表格添加完衍生变量“Category”后进行合并
A2 返回如下结果
实现了将多个文件合并,并将文件名转为列值。
两句代码,分分钟就能完成多个文件的合并,是不是很简单,很高效!
当然SPL还能实现更多复杂场景的Excel文件操作,比如:合并时汇总数据,列名不同的文件合并,横向合并,一对多合并,插入汇总sheet页等等,有需要的小伙伴可以去查阅这本书esProc 桌面版与 Excel 处理,职场上90%的Excel问题都能在这本书中找到答案。书中的代码基本上复制过去,稍加改改就可使用。
另外,SPL的安装也很简单,不需要像Python等语言那样还要配置环境,下载后双击就可以桌面安装。
下载地址:» esProc Desktop Download
英文贴
演示数据:
excelzip