利用openpyxl把一个sheet表拆分成多个sheet表

本文介绍了如何利用Python的openpyxl库将一个包含多个班级数据的Excel表拆分成多个单独的sheet。首先,读取数据到字典中,以第1个元素为键,其余元素为值。然后,创建新的workbook,根据字典的键创建新sheet并写入数据,最后保存为多个sheet的Excel文件。
摘要由CSDN通过智能技术生成

        本章介绍openpyxl的应用——把一个sheet拆分成多个sheet表。这里有个200行的杂乱无章的表,目标是把该表的每个班整理为一个sheet表。

        使用openpyxl 处理这种问题,比较复杂。有一个思路就是:先把数据放入一个字典中,再按字典的不同键值对去存入不同的sheet表中。我们一步一步来,先获取每行的数据到一个列表中:

import openpyxl
file = openpyxl.load_workbook(r"D:\临时\python试验\openpyxl\把文件拆分成多个sheet表.xlsx")
sheet_fd = file['Sheet1']          # 选择工作表

for row in sheet_fd.iter_rows(2,sheet_fd.max_row,1,sheet_fd.max_column,values_only=True):
    row_ls = [i for i in row]      # 每行生成列表
    print(row_ls)

        然后将该列表的第1个元素作为字典的键,其他组成一个列表作为字典的值之一。

import openpyxl
file = openpyxl.load_workbook(r"D:\临时\python试验\openpyxl\把文件拆分成多个sheet表.xlsx")
sheet_fd = file['Sheet1']

d = {}
for row in sheet_fd.iter_rows(2,sheet_fd.max_row,1,sheet_fd.max_column,values_only=True):
    row_ls = [i for i in row]
    jian = row_ls[0]        # 作为字典的键
    zhi = row_ls[1:]        # 除了第一个之外的元素组成列表作为字典的值
    d[jian] = d.get(jian,[]) + [zhi]        # !重点

print(d)

        第10行 d.get(jian,[]) 的意思是再字典d中获取键jian,如果字典中存在键jian,那么就返回该键对应的值;如果字典中不存在键jian,那么就返回一个空列表。

        d.get(jian,[]) + [zhi] 的意思是在返回的值中新增元素(列表zhi),注意zhi一定要加[],因为加上[]后此时[zhi]为 [['陈洁', 47, 49, 29, 5]],+号相当于extend,是把列表里的元素加进去,而不是把整个列表加进去。

import openpyxl

file = openpyxl.load_workbook(r"D:\临时\python试验\openpyxl\把文件拆分成多个sheet表.xlsx")
sheet_fd = file['Sheet1']

d = {}
for row in sheet_fd.iter_rows(2,sheet_fd.max_row,1,sheet_fd.max_column,values_only=True):
    row_ls = [i for i in row]
    jian = row_ls[0]        # 作为字典的键
    zhi = row_ls[1:]        # 除了第一个之外的元素组成列表作为字典的值
    d[jian] = d.get(jian,[]) + [zhi]

new_file = openpyxl.Workbook()

for key,value in d.items():
    sheet = new_file.create_sheet(key)        # 创建键对应的文件
    sheet.append(['姓名','语文','数学','英语','综合科'])   # 写入表头
    for n_row in value:
        sheet.append(n_row)       # 写入数据行

new_file.remove(new_file['Sheet'])      # 移除创建new_file时默认产生的Sheet
new_file.save(r"D:\临时\python试验\openpyxl\一表拆成多表.xlsx")

        本文excel文件:链接:https://pan.baidu.com/s/1RkLCCXuWfPz6rYcnuUJrrw?pwd=z3u1 
提取码:z3u1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值