Python Openpyxl库:按表格列内容拆分Excel文件并保存
使用 Python Openpyxl 库拆分 Excel 表格并保存
以下代码演示了如何使用 Python Openpyxl 库将 Excel 表格根据指定列内容进行拆分,并将每个拆分后的表格以对应单元格内容命名,生成独立的 Excel 文件并保存到桌面上的文件夹中。代码还展示了如何冻结第一个工作表的窗格 A1 行内容,并将该内容带原格式复制到每个新工作表中。pythonimport osfrom openpyxl import load_workbook, Workbookfrom openpyxl.utils import get_column_letterfrom openpyxl.styles import NamedStyle
设置工作簿路径和表头列名称workbook_path = 'example.xlsx'header_col_name = 'Name'
加载工作簿wb = load_workbook(workbook_path)
获取第一个工作表ws = wb.worksheets[0]
冻结第一个工作表窗格 A1 行的内容ws.freeze_panes = 'A2'
获取表头列的索引和名称header_col_index = Nonefor col in range(1, ws.max_column + 1): if ws.cell(row=2, column=col).value == header_col_name: header_col_index = col break
if header_col_index is None: raise ValueError(f'Cannot find column '{header_col_name}'')
创建一个新的工作簿和样式new_wb = Workbook()new_ws_style = NamedStyle(name='header')new_ws_style.font = ws.cell(row=2, column=header_col_index).fontnew_ws_style.fill = ws.cell(row=2, column=header_col_index).fillnew_ws_style.border = ws.cell(row=2, column=header_col_index).bordernew_ws_style.alignment = ws.cell(row=2, column=header_col_index).alignment
遍历表格,根据表头列的值拆分工作表for row in range(3, ws.max_row + 1): cell_value = ws.cell(row=row, column=header_col_index).value if cell_value is None: continue
# 创建一个新的工作表 new_ws = new_wb.create_sheet(title=cell_value) new_ws.append([ws.cell(row=2, column=col).value for col in range(1, ws.max_column + 1)]) new_ws.row_dimensions[1].height = ws.row_dimensions[2].height new_ws.column_dimensions['A'].width = ws.column_dimensions['A'].width new_ws.column_dimensions[get_column_letter(header_col_index)].width = ws.column_dimensions[get_column_letter(header_col_index)].width new_ws['A1'].style = new_ws_style new_ws[f'{get_column_letter(header_col_index)}1'].style = new_ws_style
# 复制行数据到新的工作表 for col in range(1, ws.max_column + 1): new_ws.cell(row=2, column=col).value = ws.cell(row=row, column=col).value new_ws.cell(row=2, column=col).font = ws.cell(row=row, column=col).font new_ws.cell(row=2, column=col).fill = ws.cell(row=row, column=col).fill new_ws.cell(row=2, column=col).border = ws.cell(row=row, column=col).border new_ws.cell(row=2, column=col).alignment = ws.cell(row=row, column=col).alignment
# 写入窗格 A1 的内容 new_ws['A1'].value = ws['A1'].value new_ws['A1'].font = ws['A1'].font new_ws['A1'].fill = ws['A1'].fill new_ws['A1'].border = ws['A1'].border new_ws['A1'].alignment = ws['A1'].alignment
创建一个新的文件夹并保存工作簿folder_path = os.path.join(os.path.expanduser('~'), 'Desktop', header_col_name)if not os.path.exists(folder_path): os.mkdir(folder_path)
for sheet in new_wb.worksheets: sheet_path = os.path.join(folder_path, f'{sheet.title}.xlsx') new_wb.save(sheet_pat
原文地址: https://www.cveoy.top/t/topic/fW8A 著作权归作者所有。请勿转载和采集!