使用 Python 3.0+ 版本的 openpyxl 库,可以轻松地将 Excel 表格按第二行中的‘姓名’列进行拆分,并将所有具有相同姓名的行生成新的表格。新表格以‘原表格名_姓名.xlsx’命名,并保留原表格 A1 单元格的格式。

import openpyxl

# 打开原表格
filename = 'example.xlsx'
wb = openpyxl.load_workbook(filename)

# 循环遍历所有工作表
for sheetname in wb.sheetnames:
    sheet = wb[sheetname]

    # 获取姓名这一列的列号
    name_col = None
    for col in range(1, sheet.max_column+1):
        if sheet.cell(row=2, column=col).value == '姓名':
            name_col = col
            break
    if name_col is None:
        continue

    # 按照姓名拆分表格
    name_rows = {}
    for row in range(3, sheet.max_row+1):
        name = sheet.cell(row=row, column=name_col).value
        if name is None:
            continue
        if name not in name_rows:
            name_rows[name] = [sheet[row][col].value for col in range(1, sheet.max_column+1)]
        else:
            name_rows[name].extend([sheet[row][col].value for col in range(1, sheet.max_column+1)])

    # 生成新表格并复制格式
    for name in name_rows:
        new_filename = f'{sheetname}_{name}.xlsx'
        new_wb = openpyxl.Workbook()
        new_sheet = new_wb.active

        # 复制窗格行A1的格式
        source_cell = sheet.cell(row=1, column=1)
        target_cell = new_sheet.cell(row=1, column=1)
        target_cell._style = source_cell._style

        # 将数据写入新表格
        new_sheet.append([sheet.cell(row=1, column=col).value for col in range(1, sheet.max_column+1)])
        new_sheet.append([sheet.cell(row=2, column=col).value for col in range(1, sheet.max_column+1)])
        for row_data in name_rows[name]:
            new_sheet.append(row_data)

        # 保存新表格
        new_wb.save(new_filename)

该代码首先打开名为‘example.xlsx’的原表格,并循环遍历其中的所有工作表。对于每个工作表,它会筛选第二行并找到姓名这一列的列号。然后按照姓名拆分表格,并生成新的表格。新表格的文件名按照‘原表格名_姓名.xlsx’的格式生成。

在生成新表格的过程中,它会复制原表中的窗格行A1的格式,并将数据写入新表格。注意,这里使用了_style属性来复制格式,因为在 openpyxl 中,格式信息不是存储在单元格对象本身的属性中,而是存储在一个样式对象中。所以我们需要显式地复制样式信息。

最后,它会保存生成的新表格。

Python 3.0+ Excel 分割工具:按姓名拆分表格并保留格式

原文地址: https://www.cveoy.top/t/topic/ovj7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录