目录
在数据处理中,经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法,使用Python批量实现多Excel多Sheet的合并。
Pandas是Python中常用的数据处理库,提供了简便的数据处理功能。我们可以使用pandas的read_excel()函数读取Excel文件,然后使用concat()函数将多个工作表进行合并。
import pandas as pd ?
??
# 读取Excel文件 ?
file_list = ['file1.xlsx', 'file2.xlsx'] ?
dfs = [pd.read_excel(file) for file in file_list] ?
??
# 合并多个工作表 ?
result = pd.concat(dfs, ignore_index=True) ?
??
# 保存到新的Excel文件 ?
result.to_excel('merged.xlsx', index=False)
Openpyxl是Python中处理Excel文件的库,可以直接操作Excel文件。我们可以使用openpyxl的load_workbook()函数读取Excel文件,然后使用Workbook和Worksheet类创建新的工作簿和工作表,将多个工作表的数据复制到新的工作表中,最后保存为新的Excel文件。
from openpyxl import load_workbook ?
from openpyxl.utils import get_column_letter ?
from openpyxl.utils import range_boundaries ?
from openpyxl.writer.excel import save_virtual_workbook ?
from openpyxl import Workbook ?
from openpyxl.utils import get_column_letter ?
from openpyxl.utils.dataframe import dataframe_to_rows ?
??
# 读取Excel文件 ?
file_list = ['file1.xlsx', 'file2.xlsx'] ?
merged_wb = Workbook() ?
merged_ws = merged_wb.active ?
merged_ws.title = "merged" ?
headers = [] ?# 存储每个工作表的列名 ?
for file in file_list: ?
? ? wb = load_workbook(filename=file) ?
? ? ws = wb.active ?# 获取第一个工作表 ?
? ? for row in ws[1:]: ?# 获取列名 ?
? ? ? ? headers.append(row[0].value) ?# 将列名添加到headers列表中 ?
? ? for row in ws: ?# 获取数据行并复制到新的工作表中 ?
? ? ? ? new_row = [] ?# 存储新的一行数据 ?
? ? ? ? for cell in row: ?# 遍历每个单元格并复制数据到新的行中 ?
? ? ? ? ? ? new_row.append(cell.value) ?# 将单元格的值添加到新的行中 ?
? ? ? ? dataframe_to_rows(pd.DataFrame([new_row], columns=headers), index=False).map(lambda x: x.pop('Unnamed: 0'), axis=1).map(int).to_excel(merged_ws, index=False, header=False) ?# 将新的行复制到新的工作表中,并设置数据类型为整数型 ?
merged_wb.save("merged.xlsx") ?# 保存为新的Excel文件
xlrd和xlwt是Python中用于读写Excel文件的库,可以处理.xls和.xlsx格式的文件。我们可以使用xlrd的open_workbook()函数读取Excel文件,然后使用Worksheet类获取工作表对象,遍历工作表中的所有数据,将数据写入新的Excel文件中。
import xlrd ?
import xlwt ?
??
# 读取Excel文件 ?
file_list = ['file1.xls', 'file2.xls'] ?
workbook = xlrd.open_workbook(file_list[0]) ?
??
# 创建新的Excel文件 ?
new_workbook = xlwt.Workbook() ?
new_sheet = new_workbook.add_sheet('merged') ?
??
# 获取第一个工作表 ?
sheet = workbook.sheet_by_index(0) ?
??
# 合并多个工作表 ?
row = 0 ?# 当前行的索引 ?
for col in range(sheet.ncols): ?# 遍历所有列 ?
? ? new_sheet.write(row, col, sheet.cell_value(0, col)) ?# 将列名写入新的工作表中 ?
? ? for row in range(1, sheet.nrows): ?# 遍历所有数据行 ?
? ? ? ? new_sheet.write(row + row, col, sheet.cell_value(row, col)) ?# 将数据写入新的工作表中 ?
??
new_workbook.save('merged.xls') ?# 保存为新的Excel文件
如果需要批量处理多个文件夹中的多个Excel文件,可以使用os和glob库来获取所有需要处理的文件。然后使用上述方法处理每个文件中的多个工作表,最后将结果保存到新的Excel文件中。
import os ?
import glob ?
import pandas as pd ?
??
# 获取所有需要处理的Excel文件 ?
file_list = [] ?
folder_path = 'path/to/folder' ?# Excel文件所在的文件夹路径 ?
for file in glob.glob(os.path.join(folder_path, '*.xlsx')): ?# 获取所有.xlsx文件 ?
? ? file_list.append(file) ?
??
# 合并多个工作表并保存到新的Excel文件中 ?
result = pd.DataFrame() ?# 存储合并后的数据 ?
for file in file_list: ?
? ? df = pd.read_excel(file) ?# 读取Excel文件中的数据到DataFrame中 ?
? ? result = pd.concat([result, df]) ?# 将数据追加到结果中 ?
result.to_excel('merged.xlsx', index=False) ?# 将结果保存到新的Excel文件中
在上述方法中,我们可以根据实际需求选择适合的方法进行多Excel多Sheet的合并。方法一和方法二适用于处理单个Excel文件中的多个工作表,而方法三和方法四则适用于批量处理多个Excel文件中的多个工作表。在实际应用中,我们可以根据数据量的大小、处理速度的要求以及个人偏好选择适合的方法。
使用Python批量实现多Excel多Sheet合并时,需要注意以下事项:
此外,除了上述方法外,还有一些第三方库如pyexcelerate等也可以实现多Excel多Sheet的合并。这些库提供了更多的功能和灵活性,可以根据实际需求选择适合的库进行使用。