python合并同类型excel表格的方法

  • Post category:Python

针对python合并同类型excel表格的方法,以下是完整的实例教程。

1. 准备工作

在进行合并同类型excel表格之前,我们需要准备以下工作:

  1. 安装openpyxl库
  2. 准备待合并的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中同类型数据按照学生姓名和科目进行合并得到的结果。

希望以上内容能够详细地解答你的疑惑。