Python合并Excel表(多sheet)的实现

  • Post category:Python

下面我将详细讲解如何合并多个Excel表格中的多个sheet到一个新的Excel表格中的教程,包含两个示例说明。

准备工作

我们需要使用Python中的pandas库来实现Excel表格的读写和合并,因此在开始之前需要确保已经安装了pandas库。

可以通过以下命令进行安装:

pip install pandas

实现步骤

1. 加载Excel表格数据

我们需要使用pandas库中的read_excel方法来读取多个Excel表格中的多个sheet数据,将它们存储到一个列表中,并为每个sheet指定一个唯一的名称。

下面是一个读取Excel表格中多个sheets的示例代码:

import pandas as pd

# 加载Excel文件
filename = 'data.xlsx'

# 定义sheet名称和读取列的范围
sheets = {
    'sheet1': ['A2', 'C10'],
    'sheet2': ['B2', 'F20']
}

# 读取所有的sheet到DataFrame列表中
dfs = []
for sheet_name, range_value in sheets.items():
    # 使用pandas读取指定范围的数据
    df = pd.read_excel(filename, sheet_name, header=0, skiprows=0, usecols=range(range_value[0], range_value[1]))
    # 保证每个sheet的列名相同,不同的sheet之间列数可以不同
    df.columns = [f"列{idx+1}" for idx in range(len(df.columns))]
    # 为每个sheet加上唯一的标识符
    df['SheetName'] = sheet_name
    dfs.append(df)

2. 合并数据

在将所有Excel表格中的所有sheet读取到DataFrame对象中之后,我们需要使用pandas库中的concat方法将它们合并到一个新的DataFrame对象中。

这个步骤涉及到的核心代码如下:

# 将所有DataFrame对象合并到一个DataFrame中
merged_df = pd.concat(dfs, ignore_index=True)

3. 将数据写入到新的Excel表格中

最后一步是将合并后的数据写入到一个新的Excel表格中,我们同样可以使用pandas库中的ExcelWriter类来实现这个功能。

下面是一个将合并后的数据写入到新的Excel表格中的示例代码:

# 写入到新的Excel文件中
writer = pd.ExcelWriter('merged.xlsx')
# 将DataFrame写入Excel表格中
merged_df.to_excel(writer, sheet_name='合并后的数据', index=False)
# 保存Excel文件
writer.save()

示例

下面是两个完整的示例,说明如何合并多个Excel表格中的多个sheet数据到一个新的Excel表格中。

示例1:合并多个Excel表格中的多个sheet数据

import pandas as pd

# 加载Excel文件
file1 = 'data1.xlsx'
file2 = 'data2.xlsx'

# 定义sheet名称和读取列的范围
sheets1 = {
    'sheet1': ['A2', 'C10'],
    'sheet2': ['B2', 'F20']
}

sheets2 = {
    'sheet1': ['A2', 'E15'],
    'sheet2': ['B2', 'G30']
}

# 读取所有的sheet到DataFrame列表中
dfs = []
for sheet_name, range_value in sheets1.items():
    # 使用pandas读取指定范围的数据
    df = pd.read_excel(file1, sheet_name, header=0, skiprows=0, usecols=range(range_value[0], range_value[1]))
    # 将DataFrame中的列名修改为相同名称
    df.columns = [f"列{idx+1}" for idx in range(len(df.columns))]
    # 为每个sheet加上唯一的标识符
    df['SheetName'] = sheet_name
    dfs.append(df)

for sheet_name, range_value in sheets2.items():
    # 使用pandas读取指定范围的数据
    df = pd.read_excel(file2, sheet_name, header=0, skiprows=0, usecols=range(range_value[0], range_value[1]))
    # 将DataFrame中的列名修改为相同名称
    df.columns = [f"列{idx+1}" for idx in range(len(df.columns))]
    # 为每个sheet加上唯一的标识符
    df['SheetName'] = sheet_name
    dfs.append(df)

# 将所有DataFrame对象合并到一个DataFrame中
merged_df = pd.concat(dfs, ignore_index=True)

# 写入到新的Excel文件中
writer = pd.ExcelWriter('merged.xlsx')
merged_df.to_excel(writer, sheet_name='合并后的数据', index=False)
writer.save()

此代码将从两个Excel文件中读取sheet1和sheet2,将它们合并到一个DataFrame中,并将结果写入到一个新的Excel文件中。

示例2:合并同一Excel表格中的所有sheet数据

import pandas as pd

# 加载Excel文件
filename = 'data.xlsx'

# 获取所有sheet的名称
sheets = pd.read_excel(filename, sheet_name=None).keys()

# 读取所有的sheet到DataFrame列表中
dfs = []
for sheet_name in sheets:
    # 使用pandas读取所有数据
    df = pd.read_excel(filename, sheet_name, header=0)
    # 将DataFrame中的列名修改为相同名称
    df.columns = [f"列{idx+1}" for idx in range(len(df.columns))]
    # 为每个sheet加上唯一的标识符
    df['SheetName'] = sheet_name
    dfs.append(df)

# 将所有DataFrame对象合并到一个DataFrame中
merged_df = pd.concat(dfs, ignore_index=True)

# 写入到新的Excel文件中
writer = pd.ExcelWriter('merged.xlsx')
merged_df.to_excel(writer, sheet_name='合并后的数据', index=False)
writer.save()

此代码将从同一个Excel文件中读取所有的sheet数据,将它们合并到一个DataFrame中,并将结果写入到一个新的Excel文件中。