自动生成无课表(云南农业大学)

ps:有的社团组织、学生会之类的同学,每个学期需要整理成员的无课表。手动整理,费时费力,所以动手写了一个简单的python程序,更方便快捷的整理无课表。


'''
项目:基于python自动生成一组同学的Excel无课表(以云南农业大学为例)
作者:薛定e了么
时间:2022年3月11日00:32:12
使用方法:将需要整理无课表同学的课表excel文件,和此py文件,放在一个(文件夹)内,更改文件路径:
        file_dir= 'C:\\Users\\ASUS\\Desktop\\自动无课表'   #你上面所创建的文件夹路径
        notclass.save('c:\\Users\\ASUS\\Desktop\\自动无课表\\你的无课表.xls')
        运行此py文件,将在文件夹得到一个“你的无课表”excel文件。
'''
import xlrd #用来读取excel文件,不能修改数据
import xlwt #创建Excel文件并对其进行操作,但不能对已有的Excel文件进行修改
import os 
from unicodedata import name  

#用于储存无课表中的数据
wuke=[                                  
[[''],[''],[''],[''],[''],[''],['']],
[[''],[''],[''],[''],[''],[''],['']],
[[''],[''],[''],[''],[''],[''],['']],
[[''],[''],[''],[''],[''],[''],['']],
[[''],[''],[''],[''],[''],[''],['']],
[[''],[''],[''],[''],[''],[''],['']],
]

#获取文件夹中所以'.xls'文件名
file_dir= 'C:\\Users\\ASUS\\Desktop\\自动无课表'
L=[] 
for i, j, k in os.walk(file_dir):
    for file in k:
        if (os.path.splitext(file)[1] == '.xls') & ('学生个人课表' in os.path.splitext(file)[0]):
            L.append(os.path.join(file))
print(L)

#按顺序处理各个课表有无课数据
for names in L:
    workbook= xlrd.open_workbook(names)         #打开个人课表
    table = workbook.sheet_by_name('Sheet1')    #通过名称获取sheet表
    name=table.row_values(0)[0][7:10]           #获取表头的人名,用于区分不同同学课表
    print(name) 

    #按顺序读取每个人无课情况,存入列表
    workbook_hang=[3,5,8,10,13]                  #原课程表表格中,储存课程的关键行数(一到四讲及晚修)
    hang=0
    for n in workbook_hang:                      #遍历,储存课程的关键行数
        a=table.row_values(n)                    #读取,储存课程的关键行数的值(读取第n讲课,整个星期有无课) 
        hang+=1  
        for i in range(1,8):                     #先判断第n讲课,整个星期有无课
            if a[i]==' ':                        #无课打印0,有课打印1
                print(1,end=' ')
                wuke[hang][i-1].append(name)     #将有课人姓名,加入到wuke二维列表的对应位置
                wuke[hang][i-1].append('\r')                                               
            else:
                print(0,end=' ')

        print('')


#打印wuke列表所存的结果
for i in range(5):
    print(wuke[i])



#打印表头
notclass = xlwt.Workbook(encoding = 'ascii') #注意Workbook的开头W要大写
shet1 = notclass.add_sheet('无课表',cell_overwrite_ok=True)

borders = xlwt.Borders()             # 创建边框对象Create Borders
borders.left = xlwt.Borders.THIN     #对边框对象进行操作,DASHED虚线 NO_LINE没有 THIN实线
borders.right = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left_colour = 0x40           #指定上下左右的边框颜色为0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle()               # Create Style   #创建样式对象
style.borders = borders              # 将设置好的边框对象borders 加到样式对象style中。Add Borders to Style



xingqi=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
jiangci=['第一讲','第二讲','第三讲','第四讲','晚修']
s=0
for i in xingqi:
    s+=1
    shet1.write(0,s,i,style)
s=0
for i in jiangci:
    s+=1
    shet1.write(s,0,i,style)

#将wuke列表储存的数据导入xls文件
for y in range(1,6):
    for x in range(1,8):
        shet1.write(y,x,wuke[y][x-1],style)

notclass.save('c:\\Users\\ASUS\\Desktop\\自动无课表\\你的无课表.xls')   #保存无课表

本人非计算机专业学生,纯属娱乐,抛砖引玉,请各位同学批评指正,勿喷!

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值