利用python38版本openpyxl库拆分表格首先获取第一个工作表然后冻结第一个工作表窗格A1行的内容之后从第二行开始获取名称为表头的列将获取的列中所有相同内容的行带原格式生成一个新的工作表并带原格式把窗格A1的内容写入到每一个新的工作表新的工作表生成单独的excel文件并以表头列中的内容命名新建一个文件夹保存到桌面中
以下是实现代码:
import os
import openpyxl
# 获取桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# 创建一个文件夹用于存放拆分后的excel文件
folder_name = "拆分后的excel文件"
folder_path = os.path.join(desktop_path, folder_name)
if not os.path.exists(folder_path):
os.mkdir(folder_path)
# 打开要拆分的excel文件
file_name = "要拆分的excel文件.xlsx"
file_path = os.path.join(desktop_path, file_name)
wb = openpyxl.load_workbook(file_path)
# 获取第一个工作表
ws1 = wb.worksheets[0]
# 冻结第一个工作表窗格A1行的内容
ws1.freeze_panes = "A2"
# 从第二行开始获取名称为表头的列
header_col = None
for col in ws1.iter_cols(min_row=2, max_row=2):
for cell in col:
if cell.value == "表头":
header_col = col[0].column_letter
break
if header_col:
break
if not header_col:
print("未找到名称为表头的列!")
else:
# 遍历表头列中的每个单元格,生成新的工作表并写入数据
for cell in ws1[header_col][1:]:
value = cell.value
if value:
# 创建新的工作表
ws_new = wb.create_sheet(title=value)
# 写入窗格A1的内容
ws_new["A1"].value = ws1["A1"].value
ws_new["A1"].font = ws1["A1"].font
ws_new["A1"].alignment = ws1["A1"].alignment
ws_new["A1"].border = ws1["A1"].border
ws_new["A1"].fill = ws1["A1"].fill
# 遍历表头列中相同内容的行,写入数据并复制格式
for row in ws1.iter_rows(min_row=3):
if row[header_col].value == value:
ws_new.append([cell.value for cell in row])
for cell in row:
ws_new[cell.coordinate].font = cell.font
ws_new[cell.coordinate].alignment = cell.alignment
ws_new[cell.coordinate].border = cell.border
ws_new[cell.coordinate].fill = cell.fill
# 保存新的工作表到单独的excel文件中
file_name_new = f"{value}.xlsx"
file_path_new = os.path.join(folder_path, file_name_new)
wb_new = openpyxl.Workbook()
wb_new.active = ws_new
wb_new.save(file_path_new)
# 关闭excel文件
wb.close()
``
原文地址: https://www.cveoy.top/t/topic/gqBT 著作权归作者所有。请勿转载和采集!