样式展示:生成一份按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学习时再添补程序),
|