如何横向合并 Excel 表格
横向合并,也是工作中常遇到的excel问题,在excel里操作起来也比较麻烦,很多人不知道怎么做。比如一对一怎么做,一对多怎么做,行数不同怎么办,多个合并条件又怎么做。针对这些场景,本文给出了详细的解决方法。并且这里的方法肯定是大家刷到的方法里最高效的一种。
话不多说,直接上干货。
首先我们需要用到一个叫esProc SPL的工具,这是一款专门处理结构化表格数据的软件,计算功能强大,使用简单。下载安装后双击即可安装。本文中的例题均提供源代码,可复制粘贴使用。
下载地址:» esProc Desktop Download
1.一对一合并
如图,有两张表格,分别为某些肉类产品的价格表和库存表,现需要将两张表格横合并到一起。
合并前:
Meats.xlsx
MeatStock.xlsx
(1)横向合并,保留所有行(全连接)
按照Name进行合并,合并后保留所有行数据
合并后:
实现代码:
A |
|
1 |
=file("Meats.xlsx").xlsimport@t() |
2 |
=file("MeatStock.xlsx").xlsimport@t() |
3 |
=join@f(A1:Price,Name;A2:Stock,Name) |
4 |
=A3.new([Price.Name,Stock.Name].ifn():Name,Stock.Stock,Stock.MinimumStock,Price.UnitPrice) |
5 |
=file("MeatsPriceStock.xlsx").xlsexport@t(A4) |
A3 jion@f() 表示全连接,保留所有行
A4 粗色代码意思是选出不为空的 Name 值
(2)横向合并,只保留重复行(内连接)
按照Name合并,合并只保留两个文件中都有的行
合并后:
实现代码:
A |
|
1 |
=file("Meats.xlsx").xlsimport@t() |
2 |
=file("MeatStock.xlsx").xlsimport@t() |
3 |
=join(A1:Price,Name;A2:Stock,Name) |
4 |
=A3.new(Stock.Name,Stock.Stock,Stock.MinimumStock,Price.UnitPrice) |
5 |
=file("MeatsPriceStock.xlsx").xlsexport@t(A4) |
A3 内连接,保留共有行
(3)只保留第一个文件的行(左连接)
按照Name合并,合并后保留第一个文件的行
合并后:
实现代码:
A |
|
1 |
=file("Meats.xlsx").xlsimport@t() |
2 |
=file("MeatStock.xlsx").xlsimport@t() |
3 |
=join@1(A1:Price,Name;A2:Stock,Name) |
4 |
=A3.new(Price.Name,Stock.Stock,Stock.MinimumStock,Price.UnitPrice) |
5 |
=file("MeatsPriceStock.xlsx").xlsexport@t(A4) |
A3 @1 是左连接,注意这里是数字 1,不是字母 l
(4)多个合并条件,只保留第一个文件的行(左连接)
如下图,按照Region和Name两个条件,保留第一个文件的行,横向合并两个表格,
合并前:
合并后:
实现代码:
A |
|
1 |
=file("MeatsRegion.xlsx").xlsimport@t() |
2 |
=file("MeatRegionStock.xlsx").xlsimport@t() |
3 |
=join@1(A1:Price,Region,Name;A2:Stock,Region,Name) |
4 |
=A3.new(Price.Region,Price.Name,Stock.Stock,Stock.MinimumStock,Price.UnitPrice) |
5 |
=file("MeatsPriceStock.xlsx").xlsexport@t(A4) |
A3 在join()函数如加入条件字段名,就可实现多条件合并
2.一对多合并
合并前:
Types.xlsx
Foods.xlsx
合并后:
可以用全连接的方式来实现
实现代码:
A |
|
1 |
=T("Types.xlsx") |
2 |
=T("Foods.xlsx") |
3 |
=join@f(A1:Type,Type;A2:Food,Type) |
4 |
=A3.new(Food.Type,Food.Name,Food.UnitPrice,Type.Description) |
5 |
=T("FoodsDescription.xlsx",A4) |
A3 @f 为全连接
如果对大类Fruits和Meats的描述希望只出现一次,如图
合并后:
可以使用align()对齐函数
实现代码:
A |
|
1 |
=T("Types.xlsx") |
2 |
=T("Foods.xlsx") |
3 |
=A1.align(A2:Type,Type) |
4 |
=A2.new(Type,Name,UnitPrice,A3(#).Description) |
5 |
=T("FoodsDescription.xlsx",A4) |
A3 align 表示 A1 向 A2 对齐,对齐条件是 A2 的 Type 列和 A1 的 Type 列,如果 A2 有重复数据,只对齐第一行
使用SPL,复杂的excel操作,几句代码就能完成。
并且SPL的函数语法简单,符合自然逻辑思维,理解起来也不难。
当然SPL的功能不止于此,各种复杂场景的Excel文件操作SPL都不在话下。
有需要的小伙伴可以去查阅这本书esProc 桌面版与 Excel 处理,职场上90%的Excel问题都能在这本书中找到答案。书中的代码基本上复制过去,稍加改改就可使用。
英文版
演示数据:
Excelzip