Python Excel 表格拆分:按姓名分组并生成带格式的新表格
使用 Python 将 Excel 表格按姓名拆分并生成带格式的新表格
本教程将演示如何利用 Python 代码将 Excel 表格拆分成多个单独的新表格。具体步骤为:
- 提取表格第二行,找到 '姓名' 列。
- 按照姓名对表格内容进行分组。
- 将每个分组的内容生成一个新的表格,并以对应的姓名命名。
- 将原始表格 A1 单元格的格式复制到新表格的 A1 单元格中。
代码实现:
import openpyxl
# 打开原始表格
wb = openpyxl.load_workbook('原始表格.xlsx')
# 获取所有工作表名称
sheet_names = wb.sheetnames
# 遍历每个工作表
for sheet_name in sheet_names:
# 打开工作表
ws = wb[sheet_name]
# 获取第二行所有单元格
row2_cells = list(ws.rows)[1]
# 找到姓名这一列的索引
name_index = None
for i, cell in enumerate(row2_cells):
if cell.value == '姓名':
name_index = i
break
# 如果找到了姓名这一列
if name_index is not None:
# 创建一个字典,用于保存每个姓名对应的行内容
name_rows = {}
# 遍历除第一行外的所有行
for row in ws.iter_rows(min_row=2):
# 获取当前行的姓名单元格
name_cell = row[name_index]
# 如果姓名单元格不为空
if name_cell.value:
# 获取姓名
name = name_cell.value
# 如果是第一次遇到该姓名,创建一个新的工作表
if name not in name_rows:
new_ws = wb.create_sheet(title=name)
# 复制原表中的 A1 单元格格式
new_ws['A1']._style = ws['A1']._style
# 将姓名单元格的格式复制到新工作表的 A1 单元格中
new_ws['A1'].font = name_cell.font
new_ws['A1'].fill = name_cell.fill
new_ws['A1'].border = name_cell.border
new_ws['A1'].alignment = name_cell.alignment
new_ws['A1'].number_format = name_cell.number_format
# 将新工作表添加到字典中
name_rows[name] = new_ws
# 将当前行添加到该姓名对应的工作表中
name_rows[name].append(row)
# 删除原始工作表中的内容
ws.delete_rows(2, ws.max_row)
# 保存修改后的表格
wb.save('拆分后的表格.xlsx')
代码解释:
- 导入
openpyxl库,用于操作 Excel 表格。 - 打开原始表格,获取所有工作表名称。
- 遍历每个工作表,获取第二行所有单元格,并查找 '姓名' 列的索引。
- 如果找到了 '姓名' 列,则创建一个字典,用于保存每个姓名对应的行内容。
- 遍历除第一行外的所有行,获取当前行的姓名单元格。
- 如果姓名单元格不为空,则获取姓名,并判断是否已存在于字典中。
- 如果姓名不存在于字典中,则创建一个新的工作表,命名为该姓名,并将原表格 A1 单元格的格式复制到新表格的 A1 单元格中。
- 将当前行添加到该姓名对应的工作表中。
- 删除原始工作表中除第一行之外的所有行。
- 保存修改后的表格。
使用说明:
- 将代码中的 '原始表格.xlsx' 替换为你的原始表格文件路径。
- 将代码中的 '拆分后的表格.xlsx' 替换为你的目标表格文件路径。
- 确保你的原始表格中第二行包含 '姓名' 列。
- 运行代码,即可将原始表格按姓名拆分成多个新表格。
示例:
假设原始表格名为 '原始表格.xlsx',包含以下内容:
| 姓名 | 年龄 | 性别 | |---|---|---| | 张三 | 20 | 男 | | 李四 | 25 | 女 | | 张三 | 30 | 男 | | 王五 | 22 | 男 | | 李四 | 28 | 女 |
运行代码后,将会生成三个新表格:
- 张三.xlsx:包含张三的所有行。
- 李四.xlsx:包含李四的所有行。
- 王五.xlsx:包含王五的所有行。
每个新表格都带有原始表格 A1 单元格的格式。
希望这篇文章能够帮助你使用 Python 代码将 Excel 表格按姓名拆分成多个新表格。
原文地址: https://www.cveoy.top/t/topic/ovjG 著作权归作者所有。请勿转载和采集!