【办公类-16-10-03】(一周5个场地不同,含各班教师名字)“2023下学期 6个中班 自主游戏观察记录 ((python 排班表系列)

文章讲述了如何使用Python对原有的户外游戏排班表进行调整,以适应每周五个不同场地的需求,并同步更新自主游戏观察记录模板,包括从Excel到Word的转换和内容填充,以提高工作效率并保持资料准确性。
摘要由CSDN通过智能技术生成

作品展示:

背景需求:

因为户外游戏的安排变化了,从一周5个场地相同改为一周5个场地不同

【办公类-16-07-07】“2023下学期 大班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)-CSDN博客文章浏览阅读661次,点赞14次,收藏15次。【办公类-16-07-07】“2023下学期 大班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136891691

所以“自主游戏观察记录表”的内容也要修改。

【办公类-16-10-02】(一周5个场地相同)“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)-CSDN博客文章浏览阅读792次,点赞14次,收藏16次。【办公类-16-10-02】(一周5个场地相同)“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136264005?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136264005%22%2C%22source%22%3A%22reasonsummer%22%7D

原来“中2班”每周两次记录都是同一个场地内容

现在“中2班”每周两个记录内容不同

使用原来的代码做一个微调

素材准备:

EXCLE模板

word模板

因为数据源是XLS,所以要先转成xlsx,

这个表里面有多张工作表,所以要遍历每张表

读取XLSX第2-20行的数据,写入新建的“数据xlsx”

教师名字做个列表,每份docx的教师名字都不同

读取“数据.xlsx"的数据,生成doc模板

全部代码:


 # -*- coding:utf-8 -*- 1 
'''
每周5天场地不同,自主游戏观察记录模板-中2到中7,新建EXCL“数据表”
作者:阿夏
时间:2024年3月10日
'''
# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
from openpyxl import Workbook
import pandas as pd
import os
import time
import openpyxl

# 定义基本路径
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\02自主游戏观察记录模板制作'

# 原始xls文件路径和新xlsx文件路径
xls_file = path + r'\20240310 (有场地)中班新版户外游戏(班主任用).xls'
old_path = path + r'\20240310 (有场地)中班新版户外游戏(班主任用).xlsx'
new_path = path + r'\数据.xlsx'


Teather=['张二老师','李二老师','赵三老师','王三老师','冯四老师','朱四老师','谢五老师','夏五老师','戴六老师','蔡六老师','陈七老师','王七老师']

print('----------第0步:xls转xlsx----')
# 读取xls文件
xls_path = os.path.join(path, xls_file)
xls = pd.ExcelFile(xls_path)

# 创建一个新的ExcelWriter对象
xlsx_path = os.path.join(path, old_path)
writer = pd.ExcelWriter(xlsx_path, engine='xlsxwriter')

# 遍历xls文件中的每张表
for sheet_name in xls.sheet_names:
    # 读取每张表的数据
    df = pd.read_excel(xls, sheet_name)
    
    # 将每张表的数据写入新的ExcelWriter对象
    df.to_excel(writer, sheet_name=sheet_name, index=False)

# 保存ExcelWriter对象中的数据到xlsx文件
writer.save()


print('----------第1步:读取班级标签,读取指定内容,写入EXCEL----')

from openpyxl import load_workbook

title=[]
for x in range(2,8):
    title .append('中{}班户外游戏'.format(x))

# 创建一个新的Excel工作簿
wb = Workbook()

# 保存新的Excel工作簿
wb.save(new_path)


for y in range(len(title)):
    # 打开1.xlsx文件
    wb1 = load_workbook(old_path)

    # 选择'Sheet2'标签
    # sheet1 = wb1['中2班户外游戏']
    sheet1 = wb1['{}'.format(title[y])]

    # 创建一个新的工作簿2.xlsx
    wb2 = load_workbook(new_path)

    # 选择默认的活动工作表
    sheet2 = wb2.active

    # 表头内容列表
    header = ['week', 'grade', 'number', 'T1', 'T2', 'content1', 'content2']

    # 写入表头内容
    for i in range(len(header)):
       sheet2.cell(row=1, column=i+1, value=header[i])

    
    # 读取行数
    import pandas as pd

    # 读取Excel文件
    xls = pd.ExcelFile(old_path)
    # 选择第2张表的名称
    sheet_name = xls.sheet_names[1]  # 第2张表在索引1位置
    # 读取第2张表
    df = pd.read_excel(xls, sheet_name)
    # 获取第2张表的行数
    num_rows = df.shape[0]

    print(f"第2张表总共有 {num_rows} 行数据。")

    # 读取第A1:A13的内容,并保存到B1:B13
    for i in range(2, 21):        # 这里是新表写入的位置
        # 提取周次
        v0=i-1         # 从1到19
        sheet2.cell(row=i, column=1).value = v0
        print(v0)


        #   提取每周的周一和周二的户外场地内容 
        for x in range(3,5):    # 读取3和4两列
            value = sheet1.cell(row=i, column=x).value    # C列=3  第三行
            print(value)
            
            sheet2.cell(row=i, column=x+3).value = value     #  第二张的F列2行 在第6-7列插入

        # 提取年级、班级
        value = sheet1.cell(row=i, column=1).value    # A列=3 中2班
        v1=value[:1]     # 只要“中"
        v2=value[1:2]    # 只要“4"

        sheet2.cell(row=i, column=2).value = v1   
        sheet2.cell(row=i, column=3).value = v2  
      
        # 提取教师,分别写入教师名字
        T=Teather[y*2:y*2+2]
        for t in range(len(T)):
            sheet2.cell(row=i, column=t+4).value = T[t]
         

    # 保存修改后的2.xlsx文件
    wb2.save(new_path)

    print('----------第2步:制作路径----')
    zpath=os.getcwd()+'\\'
    zpath=r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\02自主游戏观察记录模板制作'+'\\'

    file_path=zpath+'零时\\'
    # print(file_path)
    # r'\零时Word'

    print('----------第3步:遍历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()用于去掉换行符
    content1=IDcard["content1"]  # str.rstrip()用于去掉换行符
    content2=IDcard["content2"]  # str.rstrip()用于去掉换行符

    # 遍历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],
            "content1": content1[i],  
            "content2": content2[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('----------第4步: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) #递归删除文件夹,即:删除非空文件夹

写代码的做周计划的好处就是,在应对“反复调整”时,能够快速方便地更改模板、内容、提高文字资料的准确性,在实操方面也能减少查询的时间,快速投入工作。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值