背景需求:
运用代码做出了中班每个班级用的户外游戏(新版)的表格(包含有场地的贴墙版和无场地的贴周计划版)
【办公类-16-07-07】“2023下学期 大班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)-CSDN博客文章浏览阅读746次,点赞22次,收藏17次。【办公类-16-07-07】“2023下学期 大班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136891691
其中(有场地贴墙版)是游戏内容+场地的写法
表格问题:
1、生成的贴墙板没有标题,第一眼看上去不知道是几班的、也不知道是什么内容
2、既然是贴墙用的,最好就是撑满A4横版整页,我应该把贴墙的安排内容全部补全。
最终效果手动制作
以下是我手动选择标签,批量添加标题(字体、大小,行距),增加框线,增加行距的结果。
表格参数
根据以上的表格样式,用AI对话大师写一段代码,以下内容就是修改“贴墙表”的格式用的
代码设计
'''
中班6个班级 2023学年下学期中班户外游戏安排_有场地和无场地 两个版本
(6个班级 每周每天换一个场地5天,)
有场地版的格式改成撑满A4横版的样式(有标题、有黑色框线、有列宽、行高设置)
作者:阿夏
时间:2024年3月22日
'''
# import sys
# sys.path.append('/path/to/openpyxl')
import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
import time
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划'
# '''班主任贴周计划用的(按班级分类)'''
weekweek=19
# int(input('共有几周?(如19周 20)\n'))
# aaa=int(input('1、需要场地、2、不要场地\n'))
for aaa in [1,2]:
print('---------第1步:制作每个班级的游戏的总表------')
# 本学期:中1,中2,中3,中4,中5,中7,中8,中9班,其中6班空缺,一共有8个中班
gradenum=[]
for g in range(2,8):
gradenum.append('中{}班'.format(g))
print(gradenum)
# gradenum.insert(0, gradenum.pop())
print(len(gradenum))#
# # ['2','3','4','5','6','7']
L8=[]# 班级数列
for b in range(19):
for d in gradenum:
L8.append(d)
print(L8)
print(len(L8))
# 制作19*5*6个元素,以便替换(备注)内容
L1=[]# 班级
for b in range(19):
for d in gradenum:
for c in range(5):
L1.append(d)
print(L1)
print(len(L1))
# 570
# # print('---------第2步:制作六类游戏的五天列表------')
ts =19*5
L=[]# 班级
L11=[]
L3=[]
L2=[]
L4=[]
# 这里是8个活动室游戏活动室,因为后面有递进,所以把最后一个 08,放到01前面,这样摆放后面才会正确)
L3=['美术游戏(滑梯)','角色游戏','沙水游戏(中庭)','表演游戏','建构游戏(三楼露台)','角色游戏',]
# 将1移动到5的后面
L3.append(L3.pop(0))
# 循环提取,获得5天一组的基础
L11=[]
for i in range(6):
# 将5移动到1的前面
L3.insert(0, L3.pop())
# print(L3)
L11.append(L3[0:5])
# print(L11)
# ['美术游戏(滑梯)', '角色游戏', '沙水游戏(中庭)', '表演游戏', '建构游戏(三楼露台)']
# ['角色游戏', '美术游戏(滑梯)', '角色游戏', '沙水游戏(中庭)', '表演游戏']
# ['建构游戏(三楼露台)', '角色游戏', '美术游戏(滑梯)', '角色游戏', '沙水游戏(中庭)']
# ['表演游戏', '建构游戏(三楼露台)', '角色游戏', '美术游戏(滑梯)', '角色游戏']
# ['沙水游戏(中庭)', '表演游戏', '建构游戏(三楼露台)', '角色游戏', '美术游戏(滑梯)']
# ['角色游戏', '沙水游戏(中庭)', '表演游戏', '建构游戏(三楼露台)', '角色游戏']
# 6种基本形体,遍历20次
L12=[]
for o1 in range(20):
for o2 in L11:
L12.append(o2)
# print(L12)
# print(len(L12))
# 120
L13=[]
for i in range(19):
# 将5移动到1的前面
L13.append(L12[i:i+6])
print(L13)
L6=[]
for b1 in L13:
for b2 in b1:
for b3 in b2:
L6.append(b3)
print(L6)
print(len(L6))
# # 根据班级,增加角色、表演旁边的场地
# # 中2班角色游戏、表演游戏场地——树屋 中3班角色游戏、表演游戏场地——小农场
# # 中4班角色游戏、表演游戏场地——中1班南门口 中5班角色游戏、表演游戏场地——中3班南门口
# # 中6班角色游戏、表演游戏场地——天台 中7班角色游戏、表演游戏场地——天台
L5=[]
coom=['2','3','4','5','6','7']
room=['树屋','小农场','大1班南门','大3班南门','天台','天台',]
print(len(L1))
print(len(L6))
for cc in range(len(L6)):
if L6[cc]=='角色游戏' or L6[cc]=='表演游戏':
# print(L6[cc])
for kk in range(len(room)) :
if L1[cc]=='中{}班'.format(coom[kk]) :
L5.append('{}({})'.format(L6[cc],room[kk]))
else:
L5.append(L6[cc])
print(L5)
print(len(L5))
L7=[]
for ff in L5:
if aaa==1:
L7.append(ff) # 美术活动(操场)
if aaa==2:
L7.append(ff[:4]) # 美术活动
print(L7)
print(len(L7))
# 570/5=114
# # print('---------第2步:如果一周有5天(不考虑跳过假日)------')
# 限制19周的
for j in range(0,int(len(L7)/5)):#第1周
L2.append(L7[j*5:j*5+5])
print(L2)
print(len(L2))
print('---------第4-1步:xls写入)------')
workbook = xlwt.Workbook()# 新建xls工作簿
sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet
print('---------第4-2步:第1行 写入 星期一等)------')
weeks = ['班级','周次','星期一','星期二','星期三','星期四','星期五',]
# weeks=['周次','美术游戏','角色游戏','建构游戏','表演游戏','沙水游戏','角色游戏']
week = len(weeks)
col=0
for d in range(0, len(weeks)):
sheet.write(0,col,weeks[d]) # 因为只有一行,所以就用有两种写法(enumerate和这种)
col+= 1
print('---------第4-3步:第2列写入周次)------') # 第0列 写入“第1周、第2周、第3周……第21周
dates=[]
# 制作第一列的所有文字
for i in range(1,int(weekweek+1)):
for r in range(len(gradenum)):
n="第{}周".format('%02d'%i) # 用遍历方法获得“第1周、第2周、第21周”字样,
dates.append(n) # 添加到列表 s
print(dates)
print(len(dates))
#114
# 写入周次
row=1
for d in range(0, len(dates)):
sheet.write(row, 1, dates[d]) # 这里enumerate不能用,因为只有一列,所以就用
row += 1
print('---------第4-3步:第1列写入班级)------')
# 写入班级列 L=班级列
row=1
for h in range(0, len(L8[:len(dates)])): # 只要班级列表的前114个
sheet.write(row,0,L8[h]) # 因为只有一行,所以就用有两种写法(enumerate和这种)
row += 1
print('---------第4-5步:第3-9列写入游戏内容一周五次相同)------')
row=1
# 写入游戏内容列 L2=游戏内容一周五个
for i in range((len(L2))): # 遍历21组[]的总数
for col,item in enumerate(L2[i],2): # L2[i]=表格内的内容=item,索引数字=col
sheet.write(row,col,item) # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列
row += 1
#
print('---------第5步:xls保存N份工作簿(每份一页)------')
try:
workbook.save(path+r"\测试.xls") # 新建保存 只能xls
print('计划生成成功')
except e:
print('失败...')
print(e)
# print('---------第6步:把1份xls按照班级,分类成N个不同的工作表内(班主任贴周计划用)------')
# https://blog.csdn.net/xo3ylAF9kGs/article/details/135856653
# 切割成同表
import pandas as pd
import os
df = pd.read_excel(path+r'\测试.xls')
if aaa==1:
writer = pd.ExcelWriter(path+r'\20240310(贴墙 有场地)中班新版户外游戏(班主任用).xlsx')
if aaa==2:
writer = pd.ExcelWriter(path+r'\20240310(贴周计划 无场地)中班新版户外游戏(班主任用).xlsx')
df.to_excel(writer, sheet_name='Sheet', index=False)
for j in df['班级'].unique():
df[df['班级'] == j].to_excel(writer, sheet_name=j+'户外游戏', index=False)
writer.save()
# # 删除过渡EXCLE
os.remove(path+r'\测试.xls')
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Font, Border, Side
# 读取Excel文件
excel_file = path+r'\20240310(贴墙 有场地)中班新版户外游戏(班主任用).xlsx'
workbook = load_workbook(excel_file)
# 选择第2-5张工作表
for sheet_name in workbook.sheetnames[1:]: # 第2-5张工作表
sheet = workbook[sheet_name]
# 遍历工作表名称,并提取前三个字
first_three_letters = sheet_name[:3]
# 在每张工作表第一行前面插入一行
sheet.insert_rows(1)
# 合并新的第一行的1-7列并设置样式
sheet.merge_cells("A1:G1")
cell = sheet["A1"]
cell.value = "{} 户外游戏含场地(新版 贴墙)2024.3".format(first_three_letters)
cell.alignment = Alignment(horizontal='center',vertical='center')
cell.font = Font(name='黑体', size=20)
sheet.row_dimensions[1].height = 42
# 设置边框和行高
thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
for row in sheet.iter_rows(min_row=2, max_row=21):
for cell in row:
cell.border = thin_border
sheet.row_dimensions[cell.row].height = 21
# 设置列宽
for col in range(1, 9):
if col in range(1, 3): # 第1-2列列宽为8.43,row=2 第一行已经合并不存在,从第2行开始添加列宽
sheet.column_dimensions[sheet.cell(row=2, column=col).column_letter].width = 8.43
else: # 第3-8列列宽为23
sheet.column_dimensions[sheet.cell(row=2, column=col).column_letter].width = 21
# 设置页面方向为横向打印
sheet.page_setup.orientation = sheet.ORIENTATION_LANDSCAPE
# 选择要设置对齐方式的单元格范围,例如A1到B2
cell_range = sheet['A1:G21']
# 设置单元格文字上下左右居中
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
for row in cell_range:
for cell in row:
cell.alignment = alignment
# 保存修改后的Excel文件
workbook.save(path+r'\20240310(贴墙 有场地)中班新版户外游戏(班主任用).xlsx')
print("处理完成,已保存贴墙版户外游戏安排")