• 【办公类-16-05-02】“大班游戏活动室排班表——领导版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周游戏室排班表

    重点说明:

      代码设计

    1. from msvcrt import LK_LOCK
    2. import sys
    3. import random
    4. import xlrd
    5. import xlwt
    6. from openpyxl import load_workbook
    7. import time
    8. import xlwings as xw
    9. time.sleep(2)
    10. '''领导用8周word表'''
    11. # 领导要的8周表
    12. print('---------第1步:大1版(每个表第一行)第1-8周的基本组------')
    13. # 本学期:大1,大2,大3,大4,大5,大7,大8,大9班,其中6班空缺,一共有8个大班
    14. # gradenum=['1','2','3','4','5','7','8','9']
    15. L=[]
    16. L2=[]
    17. L3=[]
    18. L4=[]
    19. LL=[]
    20. ll=[]
    21. gradenum=['1','2','3','4','5','7','8','9']
    22. # print(len(gradenum))# 8
    23. # radenum的长度=7,0-7,一共循环8次
    24. # 排列顺序按照原始01,02 03……排列,不需要把08元素调到01元素前。
    25. L3=['建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',]
    26. # print(L3)
    27. # 基础循环21次,并改成L
    28. for x in range(0,10):
    29. for y in L3:
    30. # print(y)
    31. L.append(y)
    32. # L3*10次 基本形体
    33. # ['建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    34. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    35. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    36. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    37. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    38. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    39. # ]
    40. # 从L里面抽取8种基本形,越向后元素数量越少
    41. for x in range(0,8):
    42. LL=L[x*5:]
    43. # LL.append(L[x*5:])
    44. L2.append(LL)
    45. # print(L2)
    46. # 如大1班基本形:从'L3[0:]'开始
    47. # 建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    48. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏',
    49. # '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏','表演游戏','建构游戏','角色游戏'……
    50. # 如大2班基本形:从'L3[5:]'开始
    51. # '表演游戏','建构游戏','角色游戏','建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏',
    52. # '表演游戏','建构游戏','角色游戏',# '建构游戏','沙水游戏','角色游戏','表演游戏','角色游戏',
    53. # '表演游戏','建构游戏','角色游戏……
    54. # 如大3班基本形:从'L3[10:]'开始
    55. # '角色游戏','表演游戏','角色游戏',# '表演游戏','建构游戏','角色游戏',# '建构游戏','沙水游戏',
    56. # '角色游戏','表演游戏','角色游戏',# '表演游戏','建构游戏','角色游戏……
    57. # 生成8个EXCEL表格
    58. for num in range(0,len(L2)): # num=0-8
    59. b=L2[num] # 提取L2[[],[]]中的单个[]
    60. # print(b)
    61. L4.clear() # 清空列表,否则第2周会有16行(每个EXCEL只需要8行)
    62. print('第{}周'.format(num+1)) # 终端里分割各个周的信息
    63. for i in range(0,1):#第1周(第X周)表格里的第1行
    64. # print(L[0:5]) #
    65. L4.append(b[0:5])
    66. for i in range(1,8): #第1周(第X周)里的2-7行()
    67. b=b[1:]
    68. b.append(b)
    69. # print(L[0:5])
    70. L4.append(b[0:5])
    71. # L3.append(L[int(num)*5:int(num)*5])
    72. # print(L4)
    73. # 第1周(第X周)表格里的8个班级信息到成EXCEL
    74. print('---------第4步:xls写入)------')
    75. workbook = xlwt.Workbook()# 新建xls工作簿
    76. sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet
    77. # 第0列 写入“第1周、第二周第一周活动室安排
    78. title="第{}周 大班 活动室安排".format(num+1) # 用遍历方法获得“第1周、第2周、第21周”字样,
    79. sheet.write(0,0,title) #每周都写入A1格
    80. # 第0列 A列纵向 写入“大1班、大2班
    81. dates=[]
    82. for i in range(0,len(gradenum)):
    83. # print(i)
    84. n='大{}班'.format(gradenum[i]) # 用遍历方法获得“大1班、大2班
    85. dates.append(n)
    86. row=2 # 班级纵向写入第3行 A3( 0 1 2)
    87. for d in range(0, len(dates)):
    88. sheet.write(row, 0, dates[d]) # 这里enumerate不能用,因为只有一列,所以就用
    89. row += 1
    90. # 第1行(A2) 横向写入 星期一 '星期二','星期三','星期四','星期五 #
    91. weeks = ['班级','周一','周二','周三','周四','周五']
    92. week = len(weeks)
    93. col=0 # 从第0列(A)1行(2)写入,A2-F2
    94. for d in range(0, len(weeks)):
    95. sheet.write(1,col,weeks[d]) # 1=行 (0,1)
    96. col+= 1
    97. # 第B2开始写入 活动室内容
    98. arrlan = len(L4)# L4列表元素的数量
    99. row = 2 # 第3行
    100. for i in range(arrlan): # 遍历21组[]的总数
    101. for col,item in enumerate(L4[i],1): # L2[i]=表格内的内容=item,索引数字=col
    102. sheet.write(row,col,item) # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列 2行1列=B3
    103. row += 1
    104. print('---------第5步:xls保存N份工作簿(每份一页)------')
    105. try:
    106. workbook.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\第{}周大班游戏活动室安排(领导版8周).xls".format(num+1)) # 新建保存 只能xls
    107. print('计划生成成功')
    108. except e:
    109. print('失败...')
    110. print(e)
    111. print('--------信息合并到1张上有标题----------')
    112. # https://blog.csdn.net/xuyd33/article/details/72629460?
    113. import xlrd
    114. import xlwt
    115. import os
    116. from xlutils.copy import copy
    117. import os.path
    118. from xlwt import *
    119. # dir = input("输入文件路径\n");
    120. dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png'
    121. start_row=1
    122. end_row = 0
    123. all_file = [];
    124. def min_s(a, b):
    125. if a == 0:
    126. return b
    127. if (a > b):
    128. return b
    129. else:
    130. return a
    131. # 遍历所有同学文件
    132. for parent, folder, filename in os.walk(dir):
    133. for file, x in zip(filename, range(len(filename))):
    134. file = os.path.join(parent, filename[x])
    135. print(filename[x])
    136. all_file.append(file)
    137. print("\n文件总数:", len(all_file))
    138. if os.path.exists('{}\result.xls'.format(dir)):
    139. os.remove('{}\result.xls'.format(dir))
    140. w = xlwt.Workbook()
    141. row = 0;
    142. ws = w.add_sheet('sheet1', cell_overwrite_ok=True)
    143. style = XFStyle()
    144. fnt = Font()
    145. fnt.height = 240 # 小四
    146. fnt.name = u'宋体'
    147. style.font = fnt
    148. align = Alignment()
    149. align.horz = 2
    150. style.alignment = align
    151. for single_file_path in all_file:
    152. data = xlrd.open_workbook(single_file_path)
    153. sheet = data.sheet_by_index(0)
    154. if sheet.nrows >= start_row:
    155. for i in range(start_row - 1, min_s(end_row, sheet.nrows)):
    156. list = sheet.row_values(i)
    157. for col in range(0, len(list)):
    158. ws.write(row, col, list[col], style)
    159. row = row + 1;
    160. else:
    161. print("非法填写的表格名称:" + single_file_path)
    162. # 合并A列-N列,第一个参数是位置,第二个参数是内容,第三个参数是自定义格式
    163. #设置行高,set_tow(行号,对应行高)
    164. w.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\大班游戏活动室安排(领导版8周).xls')
    165. os.system("pause")
    166. print('--------标题合并居中----------')
    167. '''表格处理
    168. 1、表格字体:宋体小四
    169. 2、表格段落:30绑
    170. 3、列宽2.5CM
    171. 4、手动合并表格
    172. '''

    运行后的效果:

    EXCEL表格效果

     

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

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

    感悟:

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

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

  • 相关阅读:
    基于py的网络路由实验
    JavaScript基础语法(1、基础知识)
    Mysql-SQL优化
    【javaEE初阶】多线程 _ 进阶篇 _ 死锁
    通过顶顶通呼叫中心中间件玩转FreeSWITCH媒体流
    MLP神经网络,GRNN神经网络,SVM神经网络以及深度学习神经网络对比识别人体健康非健康数据
    纯C++自动识别设备串口
    那些配置服务器踩的坑
    集合~泛型
    解决文件传输难题:如何绕过Gitee的100MB上传限制
  • 原文地址:https://blog.csdn.net/reasonsummer/article/details/127040498