【办公类-16-05-02】“2022上学期 大班游戏活动室排班表——领导版8周”(python 排班表系列)

样式展示:生成一份按8周排序的“大班活动室安排表”

1、人工排序的样式

 

2.Python生成的样式和内容

背景需求:

    前一个《大班游戏活动室排班表》主要是针对班主任贴周计划用(按班级分类 各21周,),我想领导做资料时,用的还是word版(8周)的内容比较方便。所以试着用程序写出这种样式——按周次分割一组,每组有8各班级。

表格样式

  结构分析

1、每周:斜线递进1位

      以第1周为例,8个班级的活动内容依次递进1位(大1班第1周 01建构 02沙水 03角色 ……,大2班第1周就从02沙水开始,03角色、04表演)

2、每班:按顺序延续

第1周的组:第1行(大1班)排序:01建构 02沙水 03角色  04表演 05角色

第2周的组:第1行(大1班)排序:06表演、07建构、08角色、01建构、02沙水

也就是表格 一个班级的使用活动室是按照顺序排列的

3、数量:只要8周(8个表格)

领导用的表格,只有8周,(8周1循环),所以只要8个表格

4、基本元素:

 通过推算不重复信息,可以获得基本元素内容

01建构游戏、02沙水游戏、03角色游戏、04表演游戏、

05角色游戏、06表演游戏、07建构游戏、08角色游戏

所有的递进都是以这个为基础进行循环的。

 第二部分:领导用的8周游戏室排班表

重点说明:

  代码设计

from msvcrt import LK_LOCK
import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
import time
import xlwings as xw

time.sleep(2)



'''领导用8周word表'''

# 领导要的8周表
print('---------第1步:大1版(每个表第一行)第1-8周的基本组------')

# 本学期:大1,大2,大3,大4,大5,大7,大8,大9班,其中6班空缺,一共有8个大班
# gradenum=['1','2','3','4','5','7','8','9']

L=[]
L2=[]
L3=[]
L4=[]
LL=[]
ll=[]
gradenum=['1','2','3','4','5','7','8','9']
# print(len(gradenum))# 8
# radenum的长度=7,0-7,一共循环8次

# 排列顺序按照原始01,02 03……排列,不需要把08元素调到01元素前。
L3=['建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',]
# print(L3)

# 基础循环21次,并改成L
for x in range(0,10):
    for y in L3:        
        # print(y)
        L.append(y) 
# L3*10次 基本形体
# ['建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# ]        

# 从L里面抽取8种基本形,越向后元素数量越少
for x in range(0,8):
    LL=L[x*5:]
    # LL.append(L[x*5:])
    L2.append(LL)
# print(L2)

# 如大1班基本形:从'L3[0:]'开始
# 建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏'……
# 如大2班基本形:从'L3[5:]'开始
# '表演游戏','建构游戏','角色游戏','建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏',
# '表演游戏','建构游戏','角色游戏',# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏',
# '表演游戏','建构游戏','角色游戏……
# 如大3班基本形:从'L3[10:]'开始
# '角色游戏','表演游戏','角色游戏',# '表演游戏','建构游戏','角色游戏',# '建构游戏','沙水游戏',
# '角色游戏','表演游戏','角色游戏',# '表演游戏','建构游戏','角色游戏……

# 生成8个EXCEL表格
for num in range(0,len(L2)):       # num=0-8 
    b=L2[num]      # 提取L2[[],[]]中的单个[]
    # print(b)
    L4.clear()    # 清空列表,否则第2周会有16行(每个EXCEL只需要8行)

    print('第{}周'.format(num+1))      # 终端里分割各个周的信息 
        
    for i in range(0,1):#第1周(第X周)表格里的第1行
        # print(L[0:5]) # 
        L4.append(b[0:5])   
    for i in range(1,8):  #第1周(第X周)里的2-7行()
        b=b[1:]  
        b.append(b) 
        # print(L[0:5]) 
        L4.append(b[0:5])
        # L3.append(L[int(num)*5:int(num)*5])
    # print(L4)


    # 第1周(第X周)表格里的8个班级信息到成EXCEL
    print('---------第4步:xls写入)------') 
    workbook = xlwt.Workbook()# 新建xls工作簿
    sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet 
    # 第0列 写入“第1周、第二周第一周活动室安排
                        
    title="第{}周 大班 活动室安排".format(num+1)   # 用遍历方法获得“第1周、第2周、第21周”字样,      
    sheet.write(0,0,title)          #每周都写入A1格   
    

    # 第0列 A列纵向 写入“大1班、大2班
    dates=[]
    for i in range(0,len(gradenum)):        
        # print(i)            
        n='大{}班'.format(gradenum[i])         # 用遍历方法获得“大1班、大2班
        dates.append(n) 
    
    row=2    # 班级纵向写入第3行 A3( 0 1 2)
    for d in range(0, len(dates)):
        sheet.write(row, 0, dates[d])         # 这里enumerate不能用,因为只有一列,所以就用
        row += 1    

    
    # 第1行(A2) 横向写入 星期一  '星期二','星期三','星期四','星期五  #
    weeks = ['班级','周一','周二','周三','周四','周五']
    week = len(weeks) 

    col=0    # 从第0列(A)1行(2)写入,A2-F2
    for d in range(0, len(weeks)):
        sheet.write(1,col,weeks[d])         # 1=行 (0,1)
        col+= 1


    # 第B2开始写入 活动室内容
    arrlan = len(L4)# L4列表元素的数量
    row = 2     # 第3行
    for i in range(arrlan):         # 遍历21组[]的总数
        for col,item in enumerate(L4[i],1):            # L2[i]=表格内的内容=item,索引数字=col
            sheet.write(row,col,item)  # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列 2行1列=B3
        row += 1   

    print('---------第5步:xls保存N份工作簿(每份一页)------')             
    try:
        workbook.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\第{}周大班游戏活动室安排(领导版8周).xls".format(num+1))    # 新建保存 只能xls
        print('计划生成成功')
    except e:
        print('失败...')
        print(e)
        

print('--------信息合并到1张上有标题----------')
# https://blog.csdn.net/xuyd33/article/details/72629460?

import xlrd
import xlwt
import os
from xlutils.copy import copy
import os.path
from xlwt import *

# dir = input("输入文件路径\n");
dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png'
start_row=1

end_row = 0
all_file = [];


def min_s(a, b):
    if a == 0:
        return b
    if (a > b):
        return b
    else:
        return a


# 遍历所有同学文件
for parent, folder, filename in os.walk(dir):
    for file, x in zip(filename, range(len(filename))):
        file = os.path.join(parent, filename[x])
        print(filename[x])
        all_file.append(file)
print("\n文件总数:", len(all_file))
if os.path.exists('{}\result.xls'.format(dir)):
    os.remove('{}\result.xls'.format(dir))
w = xlwt.Workbook()
row = 0;
ws = w.add_sheet('sheet1', cell_overwrite_ok=True)
style = XFStyle()
fnt = Font()
fnt.height = 240 # 小四
fnt.name = u'宋体'
style.font = fnt
align = Alignment()
align.horz = 2
style.alignment = align

for single_file_path in all_file:
    data = xlrd.open_workbook(single_file_path)
    sheet = data.sheet_by_index(0)
    if sheet.nrows >= start_row:
        for i in range(start_row - 1, min_s(end_row, sheet.nrows)):
            list = sheet.row_values(i)
            for col in range(0, len(list)):
                ws.write(row, col, list[col], style)
            row = row + 1;
    else:
        
        print("非法填写的表格名称:" + single_file_path)



# 合并A列-N列,第一个参数是位置,第二个参数是内容,第三个参数是自定义格式

#设置行高,set_tow(行号,对应行高)

w.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\大班游戏活动室安排(领导版8周).xls')
os.system("pause")


print('--------标题合并居中----------')


'''表格处理
1、表格字体:宋体小四
2、表格段落:30绑
3、列宽2.5CM
4、手动合并表格
'''

运行后的效果:

EXCEL表格效果

 

把表格选中,复制到docx里面(需要手动调整格式,适合打印

这个代码生成的表格的用途:领导做教务计划的附件黏贴

感悟:

手动调整docx也有点麻烦,最好也能用程序代码解决。

所以领导用的活动8周合并版(按周次分类,有8周)还需要研究docx的单元格合并,列宽、文字、段落大小调整。(后续做DOCX学习时再添补程序),

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值