利用python30以上的版本将excel表格拆分成单独的新表筛选第二行并找到姓名这一列按照姓名把所有相同姓名的行内容生成新的表格生成的新表格按照筛选的姓名命名并且带格式复制原表中的窗格行A1
以下是实现上述功能的Python代码:
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库打开原始表格; - 然后遍历每个工作表,对于每个工作表,首先获取第二行所有单元格;
- 然后找到姓名这一列的索引,如果找到了,则创建一个字典
name_rows,用于保存每个姓名对应的行内容; - 遍历除第一行外的所有行,对于每一行,获取当前行的姓名单元格,如果姓名单元格不为空,则获取姓名;
- 如果是第一次遇到该姓名,就创建一个新的工作表,命名为该姓名,并且复制原表中的A1单元格格式;
- 然后将当前行添加到该姓名对应的工作表中;
- 最后删除原始工作表中除第一行之外的所有行;
- 最后保存修改后的表格
原文地址: https://www.cveoy.top/t/topic/gpy6 著作权归作者所有。请勿转载和采集!