Python拆分Excel表格:按列内容生成新工作簿(OpenPyxl教程)
Python拆分Excel表格:按列内容生成新工作簿(OpenPyxl教程)
本文将介绍如何使用Python和OpenPyxl库,根据指定列的内容拆分Excel表格,并将每个唯一值对应的所有行数据保存到新的工作簿中。
问题描述
假设你有一个Excel表格,其中包含多列数据,你需要根据其中一列的内容(例如'部门'列)将表格拆分成多个新的表格,每个表格只包含对应部门的数据。
解决方案
以下是使用OpenPyxl库实现上述功能的Python代码示例:pythonimport osimport shutilfrom openpyxl import load_workbook, Workbookfrom openpyxl.utils import get_column_letter
打开原始Excel文件filename = 'example.xlsx'workbook = load_workbook(filename)
获取第一个工作表worksheet = workbook.worksheets[0]
冻结窗格worksheet.freeze_panes = 'A2'
获取表头行headers = []for cell in worksheet[2]: headers.append(cell.value)
遍历表格数据,按照表头列生成新的工作表tables = {}for row in worksheet.iter_rows(min_row=3): key = row[headers.index('表头列')].value if key not in tables: # 创建新的工作表 new_workbook = Workbook() new_worksheet = new_workbook.active new_worksheet.title = key # 复制窗格A1的内容 new_worksheet['A1'] = worksheet['A1'].value new_worksheet['A1'].font = worksheet['A1'].font new_worksheet['A1'].fill = worksheet['A1'].fill new_worksheet['A1'].border = worksheet['A1'].border new_worksheet['A1'].alignment = worksheet['A1'].alignment # 复制表头行 for i, header in enumerate(headers): new_worksheet.cell(row=2, column=i+1, value=header) new_worksheet.cell(row=2, column=i+1).font = worksheet.cell(row=2, column=i+1).font new_worksheet.cell(row=2, column=i+1).fill = worksheet.cell(row=2, column=i+1).fill new_worksheet.cell(row=2, column=i+1).border = worksheet.cell(row=2, column=i+1).border new_worksheet.cell(row=2, column=i+1).alignment = worksheet.cell(row=2, column=i+1).alignment tables[key] = new_workbook, new_worksheet # 复制当前行 new_row = [] for cell in row: new_row.append(cell.value) new_worksheet.cell(row=len(tables[key][1])+1, column=cell.column, value=cell.value) new_worksheet.cell(row=len(tables[key][1])+1, column=cell.column).font = cell.font new_worksheet.cell(row=len(tables[key][1])+1, column=cell.column).fill = cell.fill new_worksheet.cell(row=len(tables[key][1])+1, column=cell.column).border = cell.border new_worksheet.cell(row=len(tables[key][1])+1, column=cell.column).alignment = cell.alignment
创建保存目录output_dir = os.path.join(os.path.expanduser('~'), 'Desktop', 'output')if os.path.exists(output_dir): shutil.rmtree(output_dir)os.makedirs(output_dir)
保存新的工作表为单独的Excel文件for key, (new_workbook, _) in tables.items(): output_filename = os.path.join(output_dir, f'{key}.xlsx') new_workbook.save(output_filename)
代码说明:
- 导入必要的库:
os,shutil,load_workbook,Workbook,get_column_letter。2. 设置输入文件名和输出目录。3. 使用load_workbook函数打开原始Excel文件。4. 获取第一个工作表和表头信息。5. 遍历数据行,根据指定列的值创建新的工作簿和工作表。6. 复制表头行和单元格格式到新的工作表。7. 将数据行写入到对应的工作表中。8. 保存新的工作簿到输出目录。
使用方法
- 安装OpenPyxl库:
pip install openpyxl2. 将代码保存为Python文件(例如split_excel.py)。3. 修改代码中的filename变量为你的Excel文件名,并将'表头列'替换为你要根据其拆分表格的列名。4. 运行Python脚本:python split_excel.py
运行脚本后,将会在桌面创建一个名为output的文件夹,其中包含拆分后的Excel文件。
总结
本文介绍了如何使用Python和OpenPyxl库,根据指定列的内容拆分Excel表格,并将每个唯一值对应的所有行数据保存到新的工作簿中。这只是一个简单的示例,你可以根据自己的需求修改代码,实现更复杂的数据处理功能。
原文地址: https://www.cveoy.top/t/topic/fW8F 著作权归作者所有。请勿转载和采集!