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

        本章介绍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

扫描二维码关注公众号,回复: 15946977 查看本文章

猜你喜欢

转载自blog.csdn.net/m0_71559726/article/details/130367549