下面我将详细讲解如何合并多个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文件中。