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') #保存无课表
本人非计算机专业学生,纯属娱乐,抛砖引玉,请各位同学批评指正,勿喷!