如何横向合并 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)多个合并条件,只保留第一个文件的行(左连接)

如下图,按照RegionName两个条件,保留第一个文件的行,横向合并两个表格,

合并前:

..

..

合并后:

..

实现代码:


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 为全连接

如果对大类FruitsMeats的描述希望只出现一次,如图

合并后:

..

可以使用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问题都能在这本书中找到答案。书中的代码基本上复制过去,稍加改改就可使用。