Python 3.0+ Excel 分割工具:按姓名拆分表格并保留格式
使用 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 中,格式信息不是存储在单元格对象本身的属性中,而是存储在一个样式对象中。所以我们需要显式地复制样式信息。
最后,它会保存生成的新表格。
原文地址: https://www.cveoy.top/t/topic/ovj7 著作权归作者所有。请勿转载和采集!