针对python合并同类型excel表格的方法,以下是完整的实例教程。
1. 准备工作
在进行合并同类型excel表格之前,我们需要准备以下工作:
- 安装openpyxl库
- 准备待合并的excel文件
!pip install openpyxl
2. 读取Excel表格
我们首先需要使用openpyxl库中的load_workbook函数,读取需要合并的Excel表格。
import openpyxl
# 读取第一个Excel表格
workbook1 = openpyxl.load_workbook("excel1.xlsx")
sheet1 = workbook1.active
# 读取第二个Excel表格
workbook2 = openpyxl.load_workbook("excel2.xlsx")
sheet2 = workbook2.active
3. 合并同类型的数据
接下来我们需要针对同类型的数据进行合并处理,一般情况下同类型指的是表头和数据类型相同的表格。
# 定义一个合并函数
def merge_excel(sheet1, sheet2):
# 获取sheet1的行数和列数,来确定循环的范围
row1 = sheet1.max_row
col1 = sheet1.max_column
# 将sheet1的数据复制到新的工作簿中
new_workbook = openpyxl.Workbook()
new_sheet = new_workbook.active
for i in range(1, row1+1):
for j in range(1, col1+1):
new_sheet.cell(row=i, column=j, value=sheet1.cell(row=i, column=j).value)
# 获取sheet2的数据,需要排除第一行表头
row2 = sheet2.max_row
col2 = sheet2.max_column
for i in range(2, row2+1):
for j in range(1, col2+1):
new_sheet.cell(row=row1+i-1, column=j, value=sheet2.cell(row=i, column=j).value)
return new_workbook
上述函数将两个同类型的Excel表格进行合并,并将结果保存到一个新的工作簿中。
4. 测试示例
现在我们来看两个示例,以加深对合并同类型Excel表格的理解。
示例1
首先我们准备一个excel1.xlsx文件,内容如下:
姓名 | 年龄 | 性别 |
---|---|---|
张三 | 18 | 男 |
李四 | 20 | 女 |
然后我们再准备一个excel2.xlsx文件,内容如下:
姓名 | 年龄 | 性别 |
---|---|---|
王五 | 22 | 男 |
赵六 | 24 | 女 |
最后我们运行以下代码进行合并:
import openpyxl
# 读取第一个Excel表格
workbook1 = openpyxl.load_workbook("excel1.xlsx")
sheet1 = workbook1.active
# 读取第二个Excel表格
workbook2 = openpyxl.load_workbook("excel2.xlsx")
sheet2 = workbook2.active
# 执行合并
new_workbook = merge_excel(sheet1, sheet2)
# 保存合并后的结果到文件
new_workbook.save("new_excel.xlsx")
以上示例会生成一个新的Excel表格,内容如下:
姓名 | 年龄 | 性别 |
---|---|---|
张三 | 18 | 男 |
李四 | 20 | 女 |
王五 | 22 | 男 |
赵六 | 24 | 女 |
这个新的表格就是将excel1.xlsx和excel2.xlsx中同类型的数据合并得到的结果。
示例2
我们再来看一个稍微复杂一些的示例。现在,我们需要合并一个存有学生学习成绩的Excel表格,并生成一个新的表格,内容包含学生姓名、科目、成绩这三个字段。每个学生会有多条成绩记录,因此要根据学生姓名和科目来进行合并。
首先我们准备一个excel1.xlsx文件,内容如下:
姓名 | 科目 | 成绩 |
---|---|---|
张三 | 语文 | 90 |
李四 | 数学 | 85 |
张三 | 数学 | 85 |
然后我们再准备一个excel2.xlsx文件,内容如下:
姓名 | 科目 | 成绩 |
---|---|---|
李四 | 语文 | 78 |
张三 | 英语 | 93 |
王五 | 数学 | 89 |
最后我们运行以下代码进行合并:
import openpyxl
# 读取第一个Excel表格
workbook1 = openpyxl.load_workbook("excel1.xlsx")
sheet1 = workbook1.active
# 读取第二个Excel表格
workbook2 = openpyxl.load_workbook("excel2.xlsx")
sheet2 = workbook2.active
# 合并同类型数据
new_workbook = openpyxl.Workbook()
new_sheet = new_workbook.active
new_sheet['A1'] = "姓名"
new_sheet['B1'] = "科目"
new_sheet['C1'] = "成绩"
name_list = []
for r1 in sheet1.iter_rows(min_row=2, values_only=True):
if r1[0] not in name_list:
name_list.append(r1[0])
for r2 in sheet2.iter_rows(min_row=2, values_only=True):
if r2[0] not in name_list:
name_list.append(r2[0])
for name in name_list:
for r1 in sheet1.iter_rows(min_row=2, values_only=True):
if name == r1[0]:
new_sheet.append([r1[0], r1[1], r1[2]])
for r2 in sheet2.iter_rows(min_row=2, values_only=True):
if name == r2[0]:
new_sheet.append([r2[0], r2[1], r2[2]])
# 保存合并后的结果到文件
new_workbook.save("new_excel.xlsx")
以上代码会生成一个新的Excel表格,内容如下:
姓名 | 科目 | 成绩 |
---|---|---|
张三 | 语文 | 90 |
张三 | 数学 | 85 |
张三 | 英语 | 93 |
李四 | 数学 | 85 |
李四 | 语文 | 78 |
王五 | 数学 | 89 |
这个新的表格就是将excel1.xlsx和excel2.xlsx中同类型数据按照学生姓名和科目进行合并得到的结果。
希望以上内容能够详细地解答你的疑惑。