Python Openpyxl 拆分表格并合并单元格
使用 Python Openpyxl 拆分 Excel 表格
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\工作簿1.xlsx')
# 获取第一个工作表
sheet = wb.worksheets[0]
# 冻结A1窗格
sheet.freeze_panes = 'A2'
# 获取第二行所有单元格的内容
row2_values = []
for cell in sheet[2]:
row2_values.append(cell.value)
print(row2_values)
# 获取第一列所有单元格的内容
col1_values = [cell.value for cell in sheet['A']]
col1_values = col1_values[1:]# 排除A1单元格
# 拆分第一列单元格内容到新的工作表
unique_values = set(col1_values)
for value in unique_values:
count = col1_values.count(value)
new_sheet_name = f'{value} ({count} 人)'
new_sheet = wb.create_sheet(title=new_sheet_name)
# 在新工作表的第一行插入原工作表A1单元格的内容
new_sheet.insert_rows(1)
for col_num, cell in enumerate(sheet[1], 1):
new_sheet.cell(row=1, column=col_num, value=cell.value)
# 添加第二行单元格内容到新工作表
new_sheet.append(row2_values)
# 添加第一列单元格内容到新工作表
for row_num, cell_value in enumerate(col1_values):
if cell_value == value:
new_sheet.append([cell.value for cell in sheet[row_num + 2]])
# 删除新工作表中的空行
for row in new_sheet.iter_rows():
if all([cell.value is None for cell in row]):
new_sheet.delete_rows(row[0].row)
# 删除工作表名字为表头(1)人的工作表
if '表头 (1 人)' in wb.sheetnames:
wb.remove(wb['表头 (1 人)'])
# 合并第一行单元格并居中
for sheet in wb.worksheets:
sheet.merge_cells(start_row=1, start_column=1, end_row=1, end_column=sheet.max_column)
sheet.cell(row=1, column=1).alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')
# 保存为新的excel文件
wb.save(r'C:\Users\Administrator\Desktop\拆分表格结果.xlsx')
功能说明:
- 打开 Excel 文件:使用
openpyxl.load_workbook()函数打开目标 Excel 文件。 - 获取第一个工作表:使用
wb.worksheets[0]获取第一个工作表。 - 冻结 A1 窗格:使用
sheet.freeze_panes = 'A2'冻结 A1 窗格,以便在滚动时始终显示第一行和第一列。 - 获取第二行所有单元格的内容:使用
for循环遍历第二行所有单元格,并将每个单元格的值添加到一个列表中。 - 获取第一列所有单元格的内容:使用列表推导式获取第一列所有单元格的内容,并使用
col1_values = col1_values[1:]排除 A1 单元格。 - 拆分第一列单元格内容到新的工作表:使用
set()获取第一列单元格内容中的所有唯一值,然后遍历这些唯一值。对于每个唯一值,创建一张新的工作表,名称为值 (重复数量) 人。 - 在新的工作表的第一行插入原工作表 A1 单元格的内容:使用
new_sheet.insert_rows(1)在新工作表的第一行插入一行,并将原工作表 A1 单元格的内容按照原格式写入。 - 添加第二行单元格内容到新工作表:使用
new_sheet.append(row2_values)将原工作表第二行的单元格内容添加到新工作表中。 - 添加第一列单元格内容到新工作表:遍历第一列单元格内容,如果当前单元格内容与新工作表名称中的值匹配,则将该行所有单元格内容添加到新工作表中。
- 删除新工作表中的空行:使用
for循环遍历新工作表的所有行,如果该行所有单元格的值都为空,则删除该行。 - 删除工作表名字为表头(1)人的工作表:使用
if语句判断工作表中是否包含名为表头 (1 人)的工作表,如果存在则删除该工作表。 - 合并第一行单元格并居中:遍历所有工作表,使用
sheet.merge_cells()合并第一行所有单元格,然后使用sheet.cell(row=1, column=1).alignment设置合并后的单元格的水平和垂直对齐方式为居中。 - 保存为新的 Excel 文件:使用
wb.save()函数将修改后的工作簿保存到新的 Excel 文件中。
使用说明:
- 将代码中的
工作簿1.xlsx修改为您的 Excel 文件路径。 - 将代码中的
拆分表格结果.xlsx修改为保存新 Excel 文件的路径。 - 运行代码,程序会自动拆分表格并保存到新的 Excel 文件中。
注意事项:
- 此代码仅适用于 Excel 文件,其他格式的表格文件可能无法使用。
- 如果您需要对代码进行修改,请确保您了解 Python 和 openpyxl 库的基本语法和用法。
- 运行代码之前,请备份您的 Excel 文件,以防意外数据丢失。
示例:
假设您有一个名为 工作簿1.xlsx 的 Excel 文件,其中第一列包含以下数据:
部门
技术部
产品部
运营部
技术部
产品部
运行代码后,您将获得一个名为 拆分表格结果.xlsx 的 Excel 文件,其中包含三个新的工作表:
- 技术部 (2 人)
- 产品部 (2 人)
- 运营部 (1 人)
每个新工作表的第一行都包含原工作表 A1 单元格的内容,第二行包含原工作表第二行的单元格内容,其余行包含第一列单元格内容与其对应行所有单元格内容。
希望这个代码可以帮助您解决问题!
原文地址: https://www.cveoy.top/t/topic/fXcj 著作权归作者所有。请勿转载和采集!