背景需求:
已经制作了本学期的中4班自主游戏观察记录表
【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)-CSDN博客文章浏览阅读398次,点赞10次,收藏3次。【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136262898
我想给中2、中3、中4、中5、中6、中7班都制作一份《自主游戏观察记录表》
参考《中班游戏场地周次安排表(含“场地”版)》
【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)-CSDN博客文章浏览阅读953次,点赞18次,收藏9次。【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136196822
思路:
循环读取《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_workbooktitle=[]
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.xlsxwb2 = load_workbook(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\01自主游戏观察记录模板制作\数据.xlsx')# 选择默认的活动工作表sheet2 = wb2.active# 读取第A1:A13的内容,并保存到B1:B13for 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 文档合并------------') # 合并所有Wordimport win32com.client as win32import osword = win32.gencache.EnsureDispatch('Word.Application')#启动word对象应用word.Visible = Falsefiles = []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)# 合并wordlspathall=zpath+'{}({})班自主游戏观察记录(202402-202406).docx'.format(grade[i],number[i])output.SaveAs(lspathall) #保存output.Close()print('----------第4步:删除临时文件夹------------') import shutilshutil.rmtree(file_path) #递归删除文件夹,即:删除非空文件夹