Python Excel 拆分工具:按姓名分表格并复制格式
使用 Python 拆分 Excel 表格并按姓名命名
本示例代码使用 Python 3.0+ 版本,实现将 Excel 表格按姓名拆分成单独的新表格,同时保留原表中窗格行 A1 的内容和格式。
步骤:
- 打开 Excel 表格: 使用
openpyxl库打开原始 Excel 文件。2. 获取所有工作表: 读取所有工作表名称。3. 遍历每个工作表: 逐个处理每个工作表。4. 找到姓名列: 在第二行中找到包含 '姓名' 的列。5. 创建姓名字典: 创建一个字典,用于存储每个姓名对应的行。6. 遍历表格数据: 遍历除第一行外的所有行,根据姓名将数据添加到字典中。7. 生成新表格: 遍历姓名字典,为每个姓名创建一个新的工作表,并将对应的数据复制到新工作表中。8. 复制窗格行 A1: 将原始表格的 A1 单元格内容和格式复制到新表格的 A1 单元格。9. 删除空白行: 删除新表格中的空白行。10. 保存修改后的表格: 将修改后的 Excel 表格保存到新的文件中。
**代码示例:**pythonimport openpyxl
打开原始表格wb = openpyxl.load_workbook('原始表格.xlsx')
获取所有工作表sheets = wb.sheetnames
遍历每个工作表for sheet_name in sheets: # 打开当前工作表 ws = wb[sheet_name]
# 获取第二行 row_2 = ws[2]
# 遍历第二行,找到姓名这一列 name_col_index = None for cell in row_2: if cell.value == '姓名': name_col_index = cell.column
# 如果找到了姓名列 if name_col_index: # 创建一个字典,用于存储每个姓名对应的行 name_rows = {}
# 遍历除第一行外的所有行 for row in ws.iter_rows(min_row=2): # 获取当前行的姓名单元格 name_cell = row[name_col_index - 1]
# 如果姓名单元格不为空 if name_cell.value: # 获取姓名 name = name_cell.value
# 如果姓名在字典中不存在,则创建一个新的列表 if name not in name_rows: name_rows[name] = []
# 把当前行加入姓名对应的列表中 name_rows[name].append(row)
# 遍历姓名字典,生成新表格 for name, rows in name_rows.items(): # 创建一个新工作表 new_ws = wb.create_sheet(name)
# 复制窗格行 A1 到新表格 src_cell = ws['A1'] dst_cell = new_ws['A1'] dst_cell.value = src_cell.value dst_cell.font = src_cell.font dst_cell.border = src_cell.border dst_cell.fill = src_cell.fill dst_cell.number_format = src_cell.number_format dst_cell.protection = src_cell.protection dst_cell.alignment = src_cell.alignment
# 把所有行内容复制到新表格 for i, row in enumerate(rows): for j, cell in enumerate(row): new_ws.cell(row=i+2, column=j+1, value=cell.value)
# 删除新表格中的空白行 for i in range(len(rows)): new_ws.delete_rows(i+3)
保存修改后的表格wb.save('修改后的表格.xlsx
原文地址: https://www.cveoy.top/t/topic/ovjX 著作权归作者所有。请勿转载和采集!