【办公类-16-07-08】“2023下学期 大班户外游戏2(做成打印用的的贴墙版样式--A4横版撑满)”(python 排班表系列)

背景需求:

运用代码做出了中班每个班级用的户外游戏(新版)的表格(包含有场地的贴墙版和无场地的贴周计划版)

【办公类-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("处理完成,已保存贴墙版户外游戏安排")





生成两个xlsx

每个贴墙含场地表格都是A4横版撑满页面

打印正好A4横版

每页标题上的班级与标签的前3个字相同

终于打通了户外游戏场地表格的代码全流程,能应对各种场地调整了(* ̄︶ ̄)

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 11:32:02       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 11:32:02       80 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 11:32:02       64 阅读
  4. Python语言-面向对象

    2024-03-23 11:32:02       75 阅读

热门阅读

  1. 代码随想录算法训练营 Day27 回溯算法3

    2024-03-23 11:32:02       36 阅读
  2. Python从入门到精通秘籍十六

    2024-03-23 11:32:02       42 阅读
  3. 100个python代码(三)

    2024-03-23 11:32:02       35 阅读
  4. Linux 系统中 OpenCV-Python 编程环境

    2024-03-23 11:32:02       39 阅读
  5. Codeforces Round 935 (Div. 3)

    2024-03-23 11:32:02       39 阅读
  6. mybatisplus和mybatis兼容问题

    2024-03-23 11:32:02       41 阅读
  7. 第十三节 JDBC异常

    2024-03-23 11:32:02       35 阅读
  8. 计算机网络复试总结(五)

    2024-03-23 11:32:02       34 阅读
  9. vue2,style标签中引用data变量

    2024-03-23 11:32:02       32 阅读
  10. CSP认证——202012-1 期末预测之安全指数

    2024-03-23 11:32:02       38 阅读
  11. python生成13位时间戳

    2024-03-23 11:32:02       33 阅读