背景需求:
已经制作了本学期的中4班自主游戏观察记录表
我想给中2、中3、中4、中5、中6、中7班都制作一份《自主游戏观察记录表》
参考《中班游戏场地周次安排表(含“场地”版)》
思路:
循环读取《02贴墙版-中班户外游戏(含场地,有标题).xlsx》的班级标签,,把每个标签里面的A列和C列内容读取出来,写入“数据.xlsx“”
我不想去搜索班主任的姓名了,就用A和B替代,班主任使用表格时,使用查找替换功能,将A B分别变成2位班主任的名字
代码展示:
# -*- coding:utf-8 -*- 1
'''
自主游戏观察记录模板-中2到中7
作者:阿夏
时间:2024年2月23日
'''
# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
import time
#
# print('----------第0步:读取班级标签,读取指定内容,写入EXCEL----')
from openpyxl import load_workbook
title=[]
for x in range(2,8):
title .append('中{}班户外游戏'.format(x))
for y in range(len(title)):
# 打开1.xlsx文件
wb1 = load_workbook(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\01自主游戏观察记录模板制作\02贴墙版-中班户外游戏(含场地,有标题).xlsx')
# 选择'Sheet2'标签
# sheet1 = wb1['中2班户外游戏']
sheet1 = wb1['{}'.format(title[y])]
# 创建一个新的工作簿2.xlsx
wb2 = load_workbook(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\01自主游戏观察记录模板制作\数据.xlsx')
# 选择默认的活动工作表
sheet2 = wb2.active
# 读取第A1:A13的内容,并保存到B1:B13
for i in range(3, 22):
# 项目
value = sheet1.cell(row=i, column=3).value # C列=3 第三行
sheet2.cell(row=i-1, column=6).value = value # 第二张的F列2行
# 班级
value = sheet1.cell(row=i, column=1).value # A列=3 中2班
v1=value[:1] # 只要“中"
v2=value[1:2] # 只要“2"
sheet2.cell(row=i-1, column=2).value = v1
sheet2.cell(row=i-1, column=3).value = v2
# 保存修改后的2.xlsx文件
wb2.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\01自主游戏观察记录模板制作\数据.xlsx')
print('----------第1步:制作路径----')
zpath=os.getcwd()+'\\'
zpath=r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\01自主游戏观察记录模板制作'+'\\'
file_path=zpath+'零时\\'
# print(file_path)
# r'\零时Word'
print('----------第2步:遍历excel,逐个生成word(form.docx是前面的模板)------------')
try:
os.mkdir(file_path)
except:
pass
# tpl = DocxTemplate(zpath+'自主游戏观察记录模板.docx')
IDcard = pd.read_excel(zpath+'数据.xlsx')
week=IDcard["week"]
grade = IDcard["grade"]
number=IDcard["number"]
# str.rstrip()
T1=IDcard["T1"] # str.rstrip()用于去掉换行符
T2=IDcard["T2"] # str.rstrip()用于去掉换行符
content=IDcard["content"] # str.rstrip()用于去掉换行符
# math = autho['math']
# eng = autho['eng']
# 遍历excel行,逐个生成
num = IDcard.shape[0]
for i in range(num):
context = {
"week": week[i],
"grade": grade[i],
"number": number[i],
"T1": T1[i],
"T2": T2[i],
"content": content[i],
}
tpl = DocxTemplate(zpath+'自主游戏观察记录模板.docx')
tpl.render(context)
# tpl.save(file_path+r"\{} 的身份证.docx".format(name[i]))
#
tpl.save(file_path+"合并{}.docx".format('%02d'%week[i]))
print('----------第3步:doc 文档合并------------')
# 合并所有Word
import win32com.client as win32
import os
word = win32.gencache.EnsureDispatch('Word.Application')
#启动word对象应用
word.Visible = False
files = []
for filename in os.listdir(file_path):
filename = os.path.join(file_path,filename)
files.append(filename)
#新建合并后的文档(使用模板,进行12个文件夹的合并,把12个文件夹的内容贴到已有的模板(包含0.7边、四分栏))
output = word.Documents.Add()
for file in files:
output.Application.Selection.InsertFile(file)#拼接文档
#获取合并后文档的内容
doc = output.Range(output.Content.Start, output.Content.End)
# 合并word
lspathall=zpath+'{}({})班自主游戏观察记录(202402-202406).docx'.format(grade[i],number[i])
output.SaveAs(lspathall) #保存
output.Close()
print('----------第4步:删除临时文件夹------------')
import shutil
shutil.rmtree(file_path) #递归删除文件夹,即:删除非空文件夹