python实现使用一列分类成子表

类似于筛选

# -*- coding: UTF-8 -*-
import xlrd
import xlwt
import os
import xlutils
from xlutils.copy import copy

xlsx_files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.xlsx') or f.endswith('.xls')]

def print_xlsx_file():
    x = 1
    for i in xlsx_files:
        print(str(x)+"."+i)
        x+=1

def select_xlsx_file():
    number = input("请输入您选择的序号:")#人为习惯的序号从1开始
    return xlsx_files[int(number)-1]
    
def select_sheet_index():
	index = input("请输入您选择sheet的序号")#人为习惯的序号从1开始
	return int(index)
	
def select_sort_line():
    number = input("请您输入您选择作为分类依据的列号:")#人为习惯的序号从1开始
    return int(number)

def operate_xlsx_file():
	#从输入得到用户三个自定义选项,未做输入合规判断
    xl_name = select_xlsx_file()
    number = select_sort_line()
    index = select_sheet_index()
    
    data = xlrd.open_workbook(xl_name)
    workbook = copy(data)
    
    table = data.sheet_by_index(index-1)
    list = []
    #遍历每一行,找到一行与前面行不同就放入list,就以这个行的值为名字建立一个子工作簿
    #相同就将这行向已创建工作簿内拷贝
    for i in range(1, table.nrows):#跳过了第0行所以下面拷贝了第一行,第一行就是你选的那个分类依据
        value = table.cell(i, number-1).value
        if value in list:
            list[list.index(value)+1]+=1
            for j in range(0, len(table.row(i))):
                worksheet = workbook.get_sheet(value)
                #print(type(table.row(i)[j].value))只是为了测试这个第i行第j列是什么类型的
                #这里有个数据存储模式 list内放置的数据是这样的 value1,value1放了多少行,value2,value2放了多少行
                #list[list.index(value)+1]标识现在子工作簿存放到了那一行了,这样做不至于子工作簿不至于错位
                worksheet.write(list[list.index(value)+1], j, table.row(i)[j].value)
        else:
            list.append(value)
            list.append(1)
            #建立子工作簿
            workbook.add_sheet(value)
            #拷贝第一行
            for j in range(0, len(table.row(0))):
                worksheet = workbook.get_sheet(value)
                worksheet.write(0, j, table.row(0)[j].value)
            for j in range(0,len(table.row(i))):
                worksheet = workbook.get_sheet(value)
                worksheet.write(1, j, table.row(i)[j].value)
    workbook.save("afterSort"+xl_name+".xls")
    for i in range(0,len(list),2):
        print(list[i]+"有"+str(list[i+1])+"行记录")
        
def main():
    print_xlsx_file()
    operate_xlsx_file()
if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值