Python多线程批量拆分Excel表格
import os
import threading
import openpyxl
# 获取桌面路径
desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop')
# 定义线程锁
lock = threading.Lock()
# 定义拆分表格函数
def split_excel(filename):
# 加载工作簿
wb = openpyxl.load_workbook(filename)
# 获取所有工作表
sheets = wb.sheetnames
# 冻结第一个工作表窗格A1列的内容
ws1 = wb[sheets[0]]
ws1.freeze_panes = 'A2'
# 遍历所有工作表
for sheet_name in sheets:
# 获取当前工作表
ws = wb[sheet_name]
# 获取表头列
headers = []
for cell in ws[2]:
headers.append(cell.value)
# 按照表头列相同的行进行拆分
for header in set(headers):
new_wb = openpyxl.Workbook()
new_ws = new_wb.active
# 复制窗格A1的内容
new_ws['A1'].value = ws1['A1'].value
new_ws.freeze_panes = 'A2'
# 复制表头
for col_num, cell in enumerate(ws[1], 1):
new_ws.cell(row=1, column=col_num, value=cell.value)
new_ws.cell(row=1, column=col_num)._style = cell._style
# 复制相同表头的行
row_num = 2
for row in ws.iter_rows(min_row=2):
if row[headers.index(header)].value == header:
for col_num, cell in enumerate(row, 1):
new_ws.cell(row=row_num, column=col_num, value=cell.value)
new_ws.cell(row=row_num, column=col_num)._style = cell._style
row_num += 1
# 保存新的工作表
new_filename = os.path.join(desktop_path, f'{sheet_name}_{header}.xlsx')
new_wb.save(new_filename)
# 释放线程锁
with lock:
print(f'{new_filename} saved.')
# 关闭工作簿
wb.close()
# 定义多线程拆分表格函数
def split_excel_multithread(filenames):
threads = []
for filename in filenames:
t = threading.Thread(target=split_excel, args=(filename,))
threads.append(t)
t.start()
for t in threads:
t.join()
# 测试代码
if __name__ == '__main__':
filenames = ['test1.xlsx', 'test2.xlsx', 'test3.xlsx']
split_excel_multithread(filenames)
代码功能:
- 多线程拆分: 使用多线程技术同时处理多个Excel文件,提高拆分效率。
- 按表头拆分: 根据指定表头列的内容,将相同内容的行拆分到新的工作表中。
- 保留格式: 复制单元格内容的同时,保留原始单元格的格式信息。
- 冻结窗格: 保留原始Excel文件冻结窗格的设置。
- 批量处理: 支持同时处理多个Excel文件。
使用方法:
- 将代码保存为Python文件(例如split_excel.py)。
- 将需要拆分的Excel文件放到桌面文件夹中。
- 修改代码中
filenames变量,指定要处理的文件名列表。 - 运行代码:
python split_excel.py
运行结果:
代码运行完成后,会在桌面文件夹中生成拆分后的Excel文件,并打印保存的文件名。
原文地址: https://www.cveoy.top/t/topic/fW7b 著作权归作者所有。请勿转载和采集!