【办公类-16-05-01】“2022上学期 大班游戏活动室排班表——班主任版21周”(python 排班表系列)
样式展示:1-8周的内容,一摸一样复制到9-16周、17-24周
背景需求:
8月底,保教主任花了不少时间调试“大班游戏活动室安排表.docx”,并多次让我给他调整Word的表格框线位置,便于打印。
最近我都在研究“python 排班表”,因此我想了解这份已经手工排好的word“游戏室排班表”的设计原理。并用python代码生成”班主任用的各班详细排版表(EXCEL有21周)“和”领导用的总表(word只有8周)“
表格样式
共4页8周信息,前两页(1-4周内容)
共4页8周信息,前后页(5-8周内容)
结构分析
1、排列模式:斜线递进1位
以班级为基础,依次递进1位(大1班第1周 01建构 02沙水 03角色 ……,大2班第1周就从02沙水开始,03角色、04表演)
2、每周天数:5天
为了排版方便,客户选择每周排满5天(不考虑跳过假日)
3、8周内容进行循环:
本表第9周不是采用递进延续的方式,而是直接继续从第1周的内容开始排列。因此第1、9、17周的游戏室安排要求一摸一样。
4、基本元素:
通过推算不重复信息,可以获得基本元素内容
01建构游戏、02沙水游戏、03角色游戏、04表演游戏、
05角色游戏、06表演游戏、07建构游戏、08角色游戏
所有的递进都是以这个为基础进行循环的。
第一部分:班主任用的21周游戏室排班表
重点说明:
代码设计:
import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
import timetime.sleep(2)
'''班主任贴周计划用的(按班级分类)'''print('---------第1步:把8个活动室游戏活动室循环21次(105元素组成的列表)------')# 本学期:大1,大2,大3,大4,大5,大7,大8,大9班,其中6班空缺,一共有8个大班
gradenum=['1','2','3','4','5','7','8','9']
# print(len(gradenum))# 8# radenum的长度=7,0-7,一共循环8次
for num in range(0,len(gradenum)):L=[]# 这里的L等于list,因为和最后excle合并程序中的代码有冲突,所以全部改成大写的首字母L1=[]L3=[] L2=[]L4=[]# 这里是8个活动室游戏活动室,因为后面有递进,所以把最后一个 08,放到01前面,这样摆放后面才会正确)L3=['角色游戏','建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏',]# 生成8个班级8组活动室(第1个元素不同)for i in range(0,len(gradenum)): # b = L3.pop(0) # 在活动室游戏活动室列表L3中 删除 第1个元素 大1班 先删除08,就是从01开始L3.append(b) # 在活动室游戏活动室列表L3最后 添加 第1个元素# print(L[0])L1.append(L3[0:len(gradenum)]) # 把不断变化的内容添加到L1 # 8个班级游戏活动室“基本元素“构成了L1列表:[['01', '02', '03', '04', '05', '06', '07', '08'], ['02', '03', '04', '05', '06', '07', '08', '01'], ['03', '04', '05', '06', '07', '08', '01', '02'], ['04', '05', '06', '07', '08', '01', '02', '03'], ['05', '06', # print(L1)for b in range(22): # 把各班“游戏活动室基本元素8个”循环21次,数量多一点,便于后期提取内容for y in L1[num]: #抽取L1中的一组组内容 L1[0]=['01', '02', '03', '04', '05', '06', '07', '08']、L1[1]=['02', '03', '04', '05', '06', '07', '08', '01'],# print(y) # 在用 y提取L1[0]中的'01', '02', '03', '04', '05', '06', '07', '08'三个元素L.append(y) #把y提取的单个元素一个个加到列表里,并且依次循环22次,数量足够多# print(L)# 打印出来大1班 列表组=['01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08']print('---------第2步:如果一周有5天(不考虑跳过假日)------')
# print('大{}班'.format(gradenum[num]))for i in range(0,1):#第1周print(L[0:5]) # L4.append(L[0:5])for i in range(0,7): #8周一循环L=L[5:] L.append(L) print(L[0:5]) L4.append(L[0:5]) # print(L4)for xx in range(3): # 要求8周内容循环1次,这里需要循环3次,多3行手动删除for yy in L4:L2.append(yy)print(L2)
# [['建构游戏', '角色游戏', '建构游戏', '沙水游戏', '角色游戏'],
# ['表演游戏', '角色游戏', '表演游戏', '建构游戏', '角色游戏'],
# ['建构游戏', '沙水游戏', '角色游戏', '表演游戏', '角色游戏'],
# ['表演游戏', '建构游戏', '角色游戏', '建构游戏', '沙水游戏'],
# ['角色游戏', '表演游戏', '角色游戏', '表演游戏', '建构游戏'],
# ['角色游戏', '建构游戏', '沙水游戏', '角色游戏', '表演游戏'],
# ['角色游戏', '表演游戏', '建构游戏', '角色游戏', '建构游戏'],
# ['沙水游戏', '角色游戏', '表演游戏', '角色游戏', '表演游戏'],
# ['建构游戏', '角色游戏', '建构游戏', '沙水游戏', '角色游戏'],
# ['表演游戏', '角色游戏', '表演游戏', '建构游戏', '角色游戏'],
# ['建构游戏', '沙水游戏', '角色游戏', '表演游戏', '角色游戏'],
# ['表演游戏', '建构游戏', '角色游戏', '建构游戏', '沙水游戏'],
# ['角色游戏', '表演游戏', '角色游戏', '表演游戏', '建构游戏'],
# ['角色游戏', '建构游戏', '沙水游戏', '角色游戏', '表演游戏'],
# ['角色游戏', '表演游戏', '建构游戏', '角色游戏', '建构游戏'],
# ['沙水游戏', '角色游戏', '表演游戏', '角色游戏', '表演游戏'],
# ['建构游戏', '角色游戏', '建构游戏', '沙水游戏', '角色游戏'],
# ['表演游戏', '角色游戏', '表演游戏', '建构游戏', '角色游戏'],
# ['建构游戏', '沙水游戏', '角色游戏', '表演游戏', '角色游戏'],
# ['表演游戏', '建构游戏', '角色游戏', '建构游戏', '沙水游戏'],
# ['角色游戏', '表演游戏', '角色游戏', '表演游戏', '建构游戏'],
# ['角色游戏', '建构游戏', '沙水游戏', '角色游戏', '表演游戏'],
# ['角色# 游戏', '表演游戏', '建构游戏', '角色游戏', '建构游戏'],
# ['沙水游戏', '角色游戏', '表演游戏', '角色游戏', '表演游戏']]# print('---------第3步:如果每周需要跳过假日(考虑跳过假日)------')# # 每周需要的天数 (跳过节日.如第1周只有2天工作,9月1-2日(周四周五) ,第3周周一是中秋节放假1天,所以只有4个工作日)# day=['2','5','4','5','5','2','5','5','5','5','5','5','5','5','5','5','5','4','5','5','2']# print('大{}班'.format(gradenum[num]))# # 第1周# for d in range(0,1): # d=索引数字# print(L[0:int(day[0])]) # 列表有8个活动室项目,但只要其中5个(周一到周五)# L2.append(L[0:int(day[0])]) # # 第2周开始# for d in range(1,len(day)): # 0-21# # print(d+1)# L=L[int(day[d-1]):] # day[0]=2,# L.append(L) # 将a安排到最后一个座位# print(L[0:int(day[d])])# 列表是八个循环,我只要其中5个# L2.append(L[0:int(day[d])])# 以下是跳过假日的最初的写法,太长了,研究上面的是2022.9.9-2023.1.17 共21周的假日安排print('---------第4步:xls写入)------') workbook = xlwt.Workbook()# 新建xls工作簿sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet # 第0列 写入“第1周、第2周、第3周……第21周dates=[]for i in range(1,22):n="第{}周".format(i) # 用遍历方法获得“第1周、第2周、第21周”字样,dates.append(n) # 添加到列表 print(dates) # print(date)row=1for d in range(0, len(dates)):sheet.write(row, 0, dates[d]) # 这里enumerate不能用,因为只有一列,所以就用row += 1 # 第0行 写入 星期一 '星期二','星期三','星期四','星期五 #weeks = ['周次','星期一','星期二','星期三','星期四','星期五']week = len(weeks) col=0for d in range(0, len(weeks)):sheet.write(0,col,weeks[d]) # 因为只有一行,所以就用有两种写法(enumerate和这种)col+= 1 # 输入星期的另一种写法# col=0 # for row,item in enumerate(weeks,0): # 可以这样写L2[i]=表格内的内容=item,索引数字=col 0代表在A1 1代表在B1# sheet.write(col,row,item) # 第1行第1列开始写入一行”星期X"# col+=1# 第B2开始写入 活动室内容arrlan = len(L2)# L2['07', '08', '01', '02', '03']的长度 21组row = 1 # 第2行for i in range(arrlan): # 遍历21组[]的总数for col,item in enumerate(L2[i],1): # L2[i]=表格内的内容=item,索引数字=colsheet.write(row,col,item) # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列row += 1 print('---------第5步:xls保存N份工作簿(每份一页)------') try:workbook.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\大{}班活动室安排.xls".format(gradenum[num])) # 新建保存 只能xlsprint('计划生成成功')except e:print('失败...')print(e)print('---------第6步:把N份xls单页内容合并在1个工作簿的N个工作表内(班主任贴周计划用)------')
time.sleep(2)
# 获取目录下所有的表
import os
import pandas as pddir = r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png'
# 获取目录下所有的表
origin_file_list = os.listdir(dir)
print(origin_file_list)with pd.ExcelWriter(r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\202209大班活动室(班主任用).xls') as writer:# 循环遍历表格for i in origin_file_list:# 拼接每个文件的路径file_path = dir + '/' + i# 把表名赋予给对应的sheetsheet_name = i[:-4]df = pd.read_excel(file_path)# 变相解决表格中第一行第一列为空的缺陷ring = "".join(list(str(i) for i in df.index))# string = .join(list(str(i) for i in df.index))# 判断如果索引都为数字,则不保留索引(根据自己代码调整)if ring.isdigit():df.to_excel(writer, sheet_name,index=False)else:df.to_excel(writer, sheet_name) # print('--------信息合并到1张上(所有的内容复制在一起,有标题(这里用不到)----------')# # https://blog.csdn.net/HuangJiaxinZ/article/details/121672584?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121672584-blog-108296356.pc_relevant_aa_2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121672584-blog-108296356.pc_relevant_aa_2&utm_relevant_index=2
# import os
# import pandas as pd# # 功能:遍历目录下的所有xls文件,合并到指定的一个文件# def main():
# #指定目录r
# base = r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png'# desktop = os.path.join(os.path.expanduser("~"), 'Desktop')# #存放所有xls表的数据
# allLineData = pd.DataFrame()# for excelFile in findAllFile(base):
# # 读取工作簿和工作簿中的工作表
# oneFileData =pd.read_excel(excelFile)
# # append忽略行头(忽略第一行)
# allLineData=allLineData.append(oneFileData, ignore_index=True)
# # print(allLineData)
# #写到桌面
# writer=pd.ExcelWriter(os.path.join(base,'202209大班游戏活动室 有标题合并版(班主任用).xls'))
# # 使用to_excel将之前读取的工作簿中工作表的数据写入到新建的工作簿的工作表中
# allLineData.to_excel(writer, index=False)
# # 保存并且关闭工作簿
# writer.save()# #查找base目录下的所有xls和xlsx文件
# def findAllFile(base):
# for root, ds, fs in os.walk(base):
# for f in fs:
# if f.endswith('.xls') or f.endswith('.xlsx'):
# fullname = os.path.join(root, f)
# yield fullname# if __name__ == '__main__':
# main()
运行后的效果:
各班表格内1-8周、9-16周、17-24周的内容相同。
为了便于理解,我用了遍历3次,但需要在EXCEL中批量删除3行。
这个代码生成的表格的用途:大班各班班主任做周计划黏贴,并打印出来了解每天去哪一个活动室
感悟:
这是一份班主任专用的活动室安排表(按班级分类,有21周)
接下去还要做一份领导用的活动8周合并版(按周次分类,有8周)就是与word模板相似的内容。
【办公类-16-05-01】“2022上学期 大班游戏活动室排班表——班主任版21周”(python 排班表系列)相关推荐
- 【办公类-16-05-02】“2022上学期 大班游戏活动室排班表——领导版8周”(python 排班表系列)
样式展示:生成一份按8周排序的"大班活动室安排表" 1.人工排序的样式 2.Python生成的样式和内容 背景需求: 前一个<大班游戏活动室排班表>主要是针对班主任贴周 ...
- 【办公类-16-02】“2022上学期 大班运动场地分配表1-跳过节日循环排序”(python 排班表系列)
样例展示:跳过节日的运动场地循环排序表(8个班级8组内容) 背景需求: 复工复学后,周计划做起来!每周的运动场地安排照旧-- 存在问题(一): 8个大班,靠着人工排序,每周都要推算一次这个规则,推演麻 ...
- 【办公类-16-06】“2022下学期 总园活动室(沙水+建构)排班表”(python 排班表系列)
背景需求: 最近保教主任一直在为总园的活动室安排而头疼不已,和组长们商议许久,依旧无法合理把活动室安排好.3月2日下午,听主任和游戏室成员聊了一个小时的排班,结论是除沙水和建构外,其余空余时间都是&q ...
- 模板有函数模板和类模板,这个在上学期的java课里面就学了,C++应该是一样的。
模板有函数模板和类模板,这个在上学期的java课里面就学了,C++应该是一样的. .
- 【办公类-16-05-04】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)
样例展示:跳过节日的运动场地循环排序表(8个班级8组内容 下学期一共20周) 背景需求: 上学期做过一次大班运动场地安排,跳过节日.2023.2下学期运动场地排班(跳过节日)又来了. 一.场地器械微调 ...
- 【办公类-16-06-02】“2022下学期 总园活动室(沙水+建构)排班表(两周一次沙水)”(python 排班表系列)
作品展示: 背景需求: 上一篇批量制作了"7天轮回14班沙水+每周固定建构"的活动室内排班表. 一.时段冲突,调整单双周. 保教主任抽空检查后,提到:"一个班.上午.下午 ...
- 【办公类-16-06】“校历(月日版)”(python 排班表系列)
效果展示:校历日期显示带月份 背景需求: 每学期初我们都会使用到网上的校历,便于进行周计划制作.各类安全记录本填写等. 存在问题: 1.全局看日历上,每行每列都是单独的数字("日" ...
- 小敏同学利用计算机设计,福建省晋江一中、华侨中学2015-2016学年七年级数学上学期期中质量检测试题(无答案) 华东师大版...
福建省晋江一中.华侨中学2015-2016学年七年级数学上学期期中质量检测试 题 一.细心选一选,慧眼识金!(四个选项中只有一个答案是正确.每小题2分,共20分) 1.3的相反数是---------- ...
- 芜湖c语言市赛答案,安徽省芜湖市2019-2020学年高二上学期期末考试 数学(文) Word版含答案...
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...
最新文章
- 如何手撸一个较为完整的RPC框架
- python3之request用法_如何扩展python3 BaseHTTPRequestHandler类,以便可以使用成员variab调用函数...
- JSON对象和JSON 字符串之间的相互转换
- 知识图谱基础知识(一): 概念和构建
- c语言switch设计计算器,求助。。关于用switch编写简易计算器
- javascript 嵌入python_从Javascript代码调用Python函数
- 09_ServletContext介绍
- Ubuntu把iso写入U盘
- ftp搜索文件_CrossFTP for Mac(FTP客户端)
- csapp第八章 异常控制流
- 【原】iphone6来了,我该做点什么(兼容iphone6的方法)
- ps保存psd后图层全没了_ps保存成psd格式后,再打开就是一张图片而不显图层,怎么办啊??急!!...
- H5中启动Android app
- skiller3.31 发布
- Java中创建一个类的所有方式
- 极限中0除以常数_0的美好
- 不同颜色蔬菜代表什么营养?
- 分分钟安装VMware,并安装linux操作系统
- 单片机毕业设计 stm32万能红外遥控器
- 离散复习资料之一(Warshall算法)