【办公类-22-11】周计划系列(5-3)“周计划-03 周计划内容循环修改“ (2024年调整版本)

背景需求:

前文从原来的“新模版”文件夹里提取了周计划主要内容和教案内容。

【办公类-22-10】周计划系列(5-2)“周计划-02源文件docx读取5天“ (2024年调整版本)-CSDN博客文章浏览阅读1.1k次,点赞29次,收藏22次。【办公类-22-10】周计划系列(5-2)“周计划-02源文件docx读取5天“ (2024年调整版本)https://blog.csdn.net/reasonsummer/article/details/136308050

本篇是在第一遍提取基本信息基础上,对EXCEL内容进行补充,生成19份DOCX,然后再次再19份docx里面修改内容,让文字撑满格子。

虽然再次提取修改过内容的19份docx内容,到excel内,再次生成新的19份内容,

这样循环往复,逐步让每一份周计划内容变得完善。

一、提取原素材周计划docx中的所有信息(2023年、教案内容等),

 

from docx import Document

import os,time

from openpyxl import load_workbook
import glob
import re
import xlrd

pathall=[]
path =r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\03去掉回车'
 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

# 新建EXCEL
import xlwt 
f = xlwt.Workbook('encoding = utf-8')#设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True)#创建sheet工作表

# 写入标题

titleall=['grade', 'classnum', 'weekhan', 'datelong', 'day1', 'day2', 'day3', 'day4', 'day5', 'life', 'life1', 'life2',\
     'sportcon1', 'sportcon2', 'sportcon3', 'sportcon4', 'sportcon5', 'sport1', 'sport2', 'sport3', 'sport4', 'sport5',\
         'sportzd1', 'sportzd2', 'sportzd3', 'game1', 'game2', 'game3', 'game4', 'game5', 'gamezd1', 'gamezd2', \
            'theme', 'theme1', 'theme2', 'gbstudy', 'art', 'gbstudy1', 'gbstudy2', 'gbstudy3', 'jtstudy1', 'jtstudy2', 'jtstudy3', 'jtstudy4', 'jtstudy5', \
                'gy1', 'gy2', 'fk1', 'pj11', 'fk1nr', 'fk1tz', 'fk2', 'pj21', 'fk2nr', 'fk2tz', 'dateshort', 'weekshu', \
                    'title1', 'topic11', 'topic12', 'jy1', 'cl1', 'j1gc', \
                        'title2', 'topic21', 'topic22', 'jy2', 'cl2', 'j2gc', \
                            'title3', 'topic31', 'topic32', 'jy3', 'cl3', 'j3gc', \
                                'title4', 'topic41', 'topic42',  'jy4','cl4', 'j4gc',\
                                     'title5', 'topic51', 'topic52', 'jy5', 'cl5', 'j5gc',\
                                         'fs1', 'fs11', 'fs2', 'fs21','T1','T2','T3','T4','T5']
for l9 in range(len(titleall)):
    sheet1.write(0,l9,titleall[l9])

n=1

for h in range(len(pathall)):    # 19份19行
    LIST=[]
    path=pathall[h]

    doc = Document(path)
    
    # 获取第一行段落文字
    bt=doc.paragraphs[0].text
    
    # print(bt)
    # 中(5)班  第三周  活动安排
    LIST.append(bt[0])    # 添加年级
    LIST.append(bt[2])    # 添加班号
    if len(bt)==16:
        LIST.append(bt[8:9])    # 添加周次 大写 如果长度等于15 就是一位数汉字
    else:
        LIST.append(bt[8:10])

    # 获取第一行段落文字
    rq1=doc.paragraphs[1].text
    LIST.append(rq1[3:])    # 添加起止日期 
# print(LIST)

# ll=['grade','classnum','weekhan','datelong'.]



    # 获取所有表格对象
    tables = doc.tables
    # 获取word中第一个表格(周计划表)
    table = tables[0]


#     # print('-----提取第1张表格(周计划表)里面的内容----------')
    # 星期X
    for xq in range(3,8):
        xq1 = table.cell(0,xq).text        # K.append(k)        
        LIST.append(xq1)

    # 提取阿拉伯数字的周    
    # LIST.append(h+1)

#     
    # 生活名称
    l = table.cell(1,3).text
    # print(l)
    # 吃点心
    LIST.append(l)

    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,3).text.split('\n')
    # print(ll)
#    ['1.观察值日生在自主午餐环节中帮助阿姨分碗筷、毛巾的情况。', '2.提醒幼儿在自主午餐的过程中不说话,打喷嚏咳嗽要对外。']
    # 不要“1、”、“2、”
    L=[]
    for lll in range(2):    # 一共2条
        L.append(ll[lll][2:])      #    # 不要“1、”、“2、”
        LIST.append(ll[lll][2:])   
    # print(L)
    
#     # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 导入,做参考,需要调整
     # 集体游戏 
    for jt in range(3,8):
        jt1 = table.cell(3,jt).text        # K.append(k)        
        LIST.append(jt1)
    
     # 集体游戏 
    for jt2 in range(3,8):
        jt3 = table.cell(4,jt2).text        # K.append(k)        
        LIST.append(jt3)


    # 运动观察与指导(导入做参考,实际是自己写)
    s=table.cell(5,4).text.split('\n')
    # print(s)
#     # [1.'观察幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '2.观察幼儿是否能寻找皮球的多种玩法。', '3.提醒幼儿注意打曲棍干的安全。']
#     # 有些序号是自动编号,不占字数。
    S=[]
    for sss in range(3):    # 一共3条
        S.append(s[sss][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(s[sss][2:])
    # print(S)
#     # ['幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '幼儿是否能寻找皮球的多种玩法。', '提醒幼儿注意打曲棍干的安全。']

    # 游戏内容 角色游戏 导入做参考,每年都在更换 
    for fj in range(3,8):
        fj2 = table.cell(7,fj).text                
        LIST.append(fj2)

    # 游戏观察与指导(导入做参考,实际是自己写)
    g=table.cell(8,4).text.split('\n')
    # print(g)
    # ['1、观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '2、重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '3、观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']
    # 有些序号是自动编号,不占字数。
    G=[]
    for ggg in range(2):    # 一共3条
        G.append(g[ggg][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(g[ggg][2:]) 
    # print(G)
#     # ['观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']

    # 主题和主题说明
    ti=table.cell(9,4).text.split('\n')
#     print(ti)

    # ['春天来了', '1、了解春天是个万物生长的季节,关注自然环境的不断变化。', '2、感受大自然美丽的景像,以各种方式表达自己的情感与体验。']
    # 有些序号是自动编号,不占字数。
    T=[]# 第1个春天来了,不需要删除序号,直接添加
    T.append(ti[0])
    LIST.append(ti[0])
    for ttt in range(1,3):    # 一共2条主题说明
        T.append(ti[ttt][2:])         # 不要“1、”、“2、”、
        LIST.append(ti[ttt][2:])
    # print(T)
    # ['春天来了', '了解春天是个万物生长的季节,关注自然环境的不断变化。', '感受大自然美丽的景像,以各种方式表达自己的情感与体验。']

    # 个别化内容(3-5项) 一行多个,全部写入
    iiii=table.cell(10,4).text.split('\n')
    # print(iiii)     
    LIST.append(iiii)
    #  ['电风扇转起来了、漂亮的帽子、绿太阳、大雨小雨、做柳树等']

    # 美术专用活动室
    ii8=table.cell(11,4).text.split('\n')
    # print(iiii)     
    LIST.append(ii8)
    

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(12,4).text.split('\n')
    # print(ii)  
    # # ['1.观察幼儿组装各种小电风扇的情况,鼓励幼儿不断进行尝试。', '2.观察幼儿制作帽子的情况,提示幼儿尝试不同的材料进行装饰。', '3.观察幼儿在活动过程中的专注程度,鼓励幼儿专心做自己的事。'] 
    # # # 有些序号是自动编号,不占字数。
    I=[]
    for iii1 in range(3):    # 一共3条
        I.append(ii[iii1][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(ii[iii1][2:])
    # print(I)
    # # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']
   
    
    # 集体学习 横向五个格子
    K =[]
    for e in range(3,8):
        k = table.cell(13,e).text
        K.append(k)        
        LIST.append(k)
    # print(K)
    # # ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']

    
    # 家园共育(导入做参考,实际是自己写)    
    yy=table.cell(14,4).text.split('\n')
    # print(yy)
    # ['1、为春游活动做准备。', '2、在家长的帮助下学习折一些纸花。', '3、天气转暖,适当地为孩子减少衣服。']
    # 有些序号是自动编号,不占字数。删除2字符后,可能会少前面几个字
    Y=[]
    for yyy in range(2):    # 一共3条
        Y.append(yy[yyy][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(yy[yyy][2:])
    # print(Y)
    # ['为春游活动做准备。', '在家长的帮助下学习折一些纸花。', '天气转暖,适当地为孩子减少衣服。']
    

    # # 反馈与调整(变化很大)不导入
    ff=table.cell(1,8).text.split('\n')
    # print(ff)
    # print(h+1,len(ff))
    # # 8行
    
    
    for j in range(2):
        # 提取活动1
        LIST.append(ff[j*4][0:4])    
        # # 提取身份1
        LIST.append(ff[j*4][10:-1])
        # 提取反思1
        LIST.append(ff[j*4+1])
        # print(LIST)
    #     # # 提取调整1
        LIST.append(ff[j*4+3])
    # print(LIST)

    
    print('-----提取第2-5张表格(教案)里面的内容----------')
    # 第1周、第20周,或国庆周会出现格子表格不满的情况,需要手动调整

    # 获取第5行段落文字
    bt2=doc.paragraphs[6].text
    print(bt2)
    
    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('期')
    end_index = bt2.find('第')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date1 = bt2[start_index + 1: end_index].strip()
            print(date1)

    LIST.append(date1)    # 添加短日期

    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('(')
    end_index = bt2.find(')')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date2 = bt2[start_index + 1: end_index].strip()
            print(date2)



    LIST.append(date2)    # 添加添加周次

    for a in range(1,3): # 先提取2张表(  共有3张表,其中第1、2张表提取00和01,第3表提取00)  
        for b in range(2):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 

            # 有两张表
            all=table.cell(0,b).text.split('\n')
            print(len(all))
            # 看看表格里面的行数,如果等于1行(元宵节放假),就写6个空格
            if len(all)==1:
                for tt in range(6):
                    LIST.append('')
             # 看看表格里面的行数,如果大于1行,就不断写入内容
            else:
                # print(all)

                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)
                
                # print(title)
                # 空中小屋等4个题目

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for to in range(2,4):    # 行数
                    mb=all[to][2:]
                    LIST.append(mb)

                    # topic.append(all[to][2:])
                    
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][5:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][5:]
                LIST.append(pre2)
                # print(pre2)

                # ppt、故事录音

                # 提取活动过程
                pro=all[8:]
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    for a in range(3,4): # 最后提取第3张表的00部分
        for b in range(1):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 
            # 有两张表
            all=table.cell(0,b).text.split('\n')
            if len(all)==1:
                LIST.append('')

            # print(all)
            else:
                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)
                
                # print(title)
                # 空中小屋 只有一个标题

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for t in range(2,4):    # 行数
                    topic.append(all[t][2:])
                    LIST.append(all[t][2:])
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][5:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][5:]
                LIST.append(pre2)
                # print(pre2)

                # 提取活动过程
                pro=all[8:]
                # print(pro)
                # # 这是列表样式
                # ['一、我家住几楼---导入主题,激起幼儿兴趣', '1、你们的家住在哪里?住在几楼?为什么买这么高?', '小结:是呀,住这么高的房子可以看到远远的风景。', '2、小狐狸也想住楼房,楼上的房间高高的,远远望去 
                # ,可以看见一片美景,那该多开心。', '二、房
                # 合并列表
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    
        for c in range(2):        # 表3的01有两个上下格子  表2有两个格子00 01
            table = tables[3]        # 表3
            
            # 有两张表
            fs=table.cell(c,1).text.split('\n')
            # print(fs)
            # 提取反思的课程名字
            # 提取活动名称(删除后面的执教人员)
            fstitle=fs[1][5:][:-6]
            # print(fstitle)
            LIST.append(fstitle)
        
            # 纯反思部分(第三行开始)    
            fs1=fs[2:]
            # print(fs1)
            fs3=[]
            for i in range(len(fs1)):
                fs4='         '+fs1[i]        # 主动添加缩进2字符
                # print(fs4)
                fs3.append(fs4)

            # 合并列表
            fs2='\n'.join(fs3)
            # print(fs2)
            LIST.append(fs2)

    extracted_texts = []

    # 遍历前5张表格
    for table in doc.tables[:5]:
        # 获取第1行单元格内容
        first_row_cells = table.rows[0].cells

        # 提取“执教:”和回车符之间的文字并去除空格
        for cell in first_row_cells:
            cell_text = cell.text.strip()
            if '执教:' in cell_text:
                start_index = cell_text.find('执教:') + len('执教:')
                end_index = cell_text.find('\n')
                extracted_text = cell_text[start_index:end_index].strip()
                extracted_texts.append(extracted_text)

    # 打印提取的文字
    for T in extracted_texts:
        print(T)    
        LIST.append(T)

        # # 教师T1 T2
        # for teacher in range(5):
        #     T1='教师'            
        #     LIST.append(T1)
           


        

# print(LIST)   
   
    for g in range(len(LIST)):
        # K =[1,3,4,6,8,10]#要写入的列表的值
        sheet1.write(n,g,LIST[g])#写入数据参数对应 行,列,值


        

    n+=1
f.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(仅导出部分).xls')#保存.x1s到当前工作目录




# doc.close(path)

time.sleep(5)


print('--打开XLSX-,把里面的空格删除,把1、替换成1.--')# 



# # 关闭Excel文件
# workbook.close()
import xlrd
import xlwt

# 打开Excel文件
workbook = xlrd.open_workbook(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(仅导出部分).xls')

worksheet = workbook.sheet_by_index(0)  # 选择要读取的工作表

# 创建一个新的Workbook对象
new_workbook = xlwt.Workbook()
new_worksheet = new_workbook.add_sheet('Sheet1')  # 新建一个工作表

# 遍历每一行
for row_index in range(worksheet.nrows):
    row_values = worksheet.row_values(row_index)
    for col_index, cell_value in enumerate(row_values):
        if isinstance(cell_value, str):
            # 清除单元格内文字的格式
            cell_value = cell_value.strip()

            # 替换文本
            for s in range(1, 10):
                cell_value = cell_value.replace("{}、".format(s), "{}.".format(s))

            
            cell_value = cell_value.replace(' ', '')
            cell_value = cell_value.replace(' ', '')
            cell_value = cell_value.replace( "  ", '')
           

            # # 判断单元格中的文字是否有空格
            # if ' ' in cell_value:
            #     # 替换空格为无空格
            #     cell_value = cell_value.replace(' ', '')

            # if ' ' in cell_value:
            #     # 替换空格为无空格
            #     cell_value = cell_value.replace(' ', '')

            # 替换文本
            for s in range(1, 10):
                cell_value = cell_value.replace("{}、".format(s), "{}.".format(s))

        # 将修改后的值写入新的Workbook中
        new_worksheet.write(row_index, col_index, cell_value)

# 保存修改后的Excel文件
new_workbook.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(仅导出部分).xls')
# new_workbook.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(修改用版本).xls')

二、将其中的班级、周期、周次、班主任等信息替换成2024年的信息

把提取出来的“仅导出部分”,复制一份,改成“修改补充版”(主要修改基本信息(班级、日期、周次、班主任)

以下是手动修改信息:

修改一份“改过日期、班级、班主任名字”的EXCEl模板

三、读取“修改补充版”的内容,生成19份Word

代码展示——把添加过新日期、班主任名字的EXCEL,通过Word模板,生成19份新的周计划docx

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os



# path=r'D:\\test\\02办公类\\90周计划4份\\01 信息窗'+'\\'
path = r"D:\test\02办公类\91周计划4份_2024年中4班\04 周计划"
print(path)

file_path=path+r'\04合成新周计划(修改补充版)'
print(file_path)


# 二、遍历excel,逐个生成word(WeeklyPlan.docx.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

# tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(修改补充版).xls')
# WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(仅导出部分).xls')


grade = WeeklyPlan["grade"].str.rstrip()
classnum =WeeklyPlan["classnum"] # 没有str.rstrip()是数字格式
weekhan =WeeklyPlan["weekhan"].str.rstrip() # str.rstrip()都是文字格式
# day=WeeklyPlan["day"].str.rstrip() 
# sc =WeeklyPlan["sc"].str.rstrip() 
datelong =WeeklyPlan["datelong"].str.rstrip() 

day1 = WeeklyPlan["day1"].str.rstrip() 
day2 = WeeklyPlan["day3"].str.rstrip() 
day3 = WeeklyPlan["day3"].str.rstrip() 
day4 = WeeklyPlan["day4"].str.rstrip() 
day5 = WeeklyPlan["day5"].str.rstrip() 

life = WeeklyPlan["life"].str.rstrip() 
life1 = WeeklyPlan["life1"].str.rstrip() 
life2 = WeeklyPlan["life2"].str.rstrip()
sportcon1 = WeeklyPlan["sportcon1"].str.rstrip() 
sportcon2 = WeeklyPlan["sportcon2"].str.rstrip()
sportcon3 = WeeklyPlan["sportcon3"].str.rstrip() 
sportcon4 = WeeklyPlan["sportcon4"].str.rstrip()
sportcon5 = WeeklyPlan["sportcon5"].str.rstrip() 

sport1 = WeeklyPlan["sport1"].str.rstrip() 
sport2 = WeeklyPlan["sport2"].str.rstrip() 
sport3 = WeeklyPlan["sport3"].str.rstrip() 
sport4 = WeeklyPlan["sport4"].str.rstrip() 
sport5 = WeeklyPlan["sport5"].str.rstrip() 
sportzd1 = WeeklyPlan["sportzd1"].str.rstrip() 
sportzd2 = WeeklyPlan["sportzd2"].str.rstrip()
sportzd3 = WeeklyPlan["sportzd3"].str.rstrip()
game1 = WeeklyPlan["game1"].str.rstrip() 
game2 = WeeklyPlan["game2"].str.rstrip() 
game3 = WeeklyPlan["game3"].str.rstrip() 
game4 = WeeklyPlan["game4"].str.rstrip() 
game5 = WeeklyPlan["game5"].str.rstrip() 
gamezd1 = WeeklyPlan["gamezd1"].str.rstrip() 
gamezd2 = WeeklyPlan["gamezd2"].str.rstrip() 
theme= WeeklyPlan["theme"].str.rstrip() 
theme1= WeeklyPlan["theme1"].str.rstrip() 
theme2= WeeklyPlan["theme2"].str.rstrip() 
gbstudy = WeeklyPlan["gbstudy"].str.rstrip()
art = WeeklyPlan["art"].str.rstrip()
gbstudy1 = WeeklyPlan["gbstudy1"].str.rstrip() 
gbstudy2 = WeeklyPlan["gbstudy2"].str.rstrip() 
gbstudy3 = WeeklyPlan["gbstudy3"].str.rstrip() 
jtstudy1 = WeeklyPlan["jtstudy1"].str.rstrip() 
jtstudy2 = WeeklyPlan["jtstudy2"].str.rstrip() 
jtstudy3 = WeeklyPlan["jtstudy3"].str.rstrip() 
jtstudy4 = WeeklyPlan["jtstudy4"].str.rstrip() 
jtstudy5 = WeeklyPlan["jtstudy5"].str.rstrip() 
gy1 = WeeklyPlan["gy1"].str.rstrip()
gy2 = WeeklyPlan["gy2"].str.rstrip()
fk1	= WeeklyPlan["fk1"].str.rstrip()
pj11 = WeeklyPlan["pj11"].str.rstrip()
fk1nr = WeeklyPlan["fk1nr"].str.rstrip()
fk1tz = WeeklyPlan["fk1tz"].str.rstrip()
fk2 = WeeklyPlan["fk2"].str.rstrip()
pj21= WeeklyPlan["pj21"].str.rstrip()
fk2nr = WeeklyPlan["fk2nr"].str.rstrip()
fk2tz = WeeklyPlan["fk2tz"].str.rstrip()

dateshort=WeeklyPlan["dateshort"].str.rstrip() 
weekshu=WeeklyPlan["weekshu"]# 没有str.rstrip()是数字格式

title1 = WeeklyPlan["title1"].str.rstrip()
topic11 = WeeklyPlan["topic11"].str.rstrip()
topic12 = WeeklyPlan["topic12"].str.rstrip()
jy1 = WeeklyPlan["jy1"].str.rstrip()
cl1 = WeeklyPlan["cl1"].str.rstrip()
j1gc= WeeklyPlan["j1gc"].str.rstrip()

title2 = WeeklyPlan["title2"].str.rstrip()
topic21 = WeeklyPlan["topic21"].str.rstrip()
topic22 = WeeklyPlan["topic22"].str.rstrip()
jy2 = WeeklyPlan["jy2"].str.rstrip()
cl2 = WeeklyPlan["cl2"].str.rstrip()
j2gc= WeeklyPlan["j2gc"].str.rstrip()

title3 = WeeklyPlan["title3"].str.rstrip()
topic31 = WeeklyPlan["topic31"].str.rstrip()
topic32 = WeeklyPlan["topic32"].str.rstrip()
jy3 = WeeklyPlan["jy3"].str.rstrip()
cl3 = WeeklyPlan["cl3"].str.rstrip()
j3gc= WeeklyPlan["j3gc"].str.rstrip()

title4 = WeeklyPlan["title4"].str.rstrip()
topic41 = WeeklyPlan["topic41"].str.rstrip()
topic42 = WeeklyPlan["topic42"].str.rstrip()
jy4 = WeeklyPlan["jy4"].str.rstrip()
cl4 = WeeklyPlan["cl4"].str.rstrip()
j4gc= WeeklyPlan["j4gc"].str.rstrip()

title5 = WeeklyPlan["title5"].str.rstrip()
topic51 = WeeklyPlan["topic51"].str.rstrip()
topic52 = WeeklyPlan["topic52"].str.rstrip()
jy5 = WeeklyPlan["jy5"].str.rstrip()
cl5 = WeeklyPlan["cl5"].str.rstrip()
j5gc= WeeklyPlan["j5gc"].str.rstrip()

fs1 = WeeklyPlan["fs1"].str.rstrip()
fs11= WeeklyPlan["fs11"].str.rstrip()
fs2= WeeklyPlan["fs2"].str.rstrip()
fs21= WeeklyPlan["fs21"].str.rstrip()

T1 = WeeklyPlan["T1"].str.rstrip() 
T2 = WeeklyPlan["T2"].str.rstrip()
T3 = WeeklyPlan["T3"].str.rstrip() 
T4 = WeeklyPlan["T4"].str.rstrip()
T5 = WeeklyPlan["T5"].str.rstrip()

# 遍历excel行,逐个生成
num = WeeklyPlan.shape[0]
print(num)
for i in range(num):
    context = {
        "grade": grade[i],
        "classnum": classnum[i],
        "weekhan": weekhan[i],
        # "day": day[i],
        # "sc": sc[i],
        "datelong": datelong[i],
        
        "day1": day1[i],
        "day2": day2[i],
        "day3": day3[i], 
        "day4": day4[i],
        "day5": day5[i],
        
        "life": life[i],
        "life1": life1[i],
        "life2": life2[i],
        "sportcon1": sportcon1[i],
        "sportcon2": sportcon2[i],
        "sportcon3": sportcon3[i],
        "sportcon4": sportcon4[i],
        "sportcon5": sportcon5[i],
        "weekshu": weekshu[i], 
        "sport1": sport1[i],
        "sport2": sport2[i],
        "sport3": sport3[i], 
        "sport4": sport4[i],
        "sport5": sport5[i],
        "sportzd1": sportzd1[i],  
        "sportzd2": sportzd2[i],
        "sportzd3": sportzd3[i],  
        "game1": game1[i],
        "game2": game2[i],
        "game3": game3[i], 
        "game4": game4[i],
        "game5": game5[i],
        "gamezd1": gamezd1[i],
        "gamezd2": gamezd2[i],
        "theme": theme[i],
        "theme1": theme1[i],
        "theme2": theme2[i],
        "gbstudy": gbstudy[i],
        "art": art[i],
        "gbstudy1": gbstudy1[i], 
        "gbstudy2": gbstudy2[i], 
        "gbstudy3": gbstudy3[i], 
        "jtstudy1": jtstudy1[i],
        "jtstudy2": jtstudy2[i],
        "jtstudy3": jtstudy3[i],  
        "jtstudy4": jtstudy4[i],
        "jtstudy5": jtstudy5[i],  
        "gy1": gy1[i],
        "gy2": gy2[i],
        "fk1": fk1[i],
        "pj11": pj11[i], 
        "fk1nr": fk1nr[i],
        "fk1tz": fk1tz[i],
        "fk2": fk2[i],
        "pj21": pj21[i],
        "fk2nr": fk2nr[i],
        "fk2tz":fk2tz[i], 

        "dateshort": dateshort[i],
        "weekshu": weekshu[i], 

        "title1":title1[i],   
        "topic11":topic11[i],   
        "topic12":topic12[i],   
        "jy1":jy1[i],   
        "cl1":cl1[i],
        "j1gc": j1gc[i],
        "title2":title2[i],   
        "topic21":topic21[i],   
        "topic22":topic22[i],   
        "jy2":jy2[i],   
        "cl2":cl2[i],   
        "j2gc": j2gc[i],
        "title3":title3[i],   
        "topic31":topic31[i],   
        "topic32":topic32[i],   
        "jy3":jy3[i],   
        "cl3":cl3[i],   
        "j3gc": j3gc[i],
        "title4":title4[i],   
        "topic41":topic41[i],   
        "topic42":topic42[i],   
        "jy4":jy4[i],   
        "cl4":cl4[i] ,  
        "j4gc": j4gc[i],
        "title5":title5[i],   
        "topic51":topic51[i],   
        "topic52":topic52[i],   
        "jy5":jy5[i],   
        "cl5":cl5[i]  ,
        "j5gc": j5gc[i],
        "fs1": fs1[i],
        "fs11": fs11[i],
        "fs2": fs2[i],
        "fs21": fs21[i]	,

       
        "T1": T1[i],  
        "T2": T2[i],	
        "T3": T3[i],  
        "T4": T4[i],
        "T5": T5[i],  																
    
    }
    tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{} 第{}周 周计划 {}({})({}{}班下学期).docx".format('%02d'%weekshu[i],str(weekhan[i]),theme[i],datelong[i],grade[i],classnum[i]))

生成了19份改过日期的新周计划,先调整第一页“周计划横版”上的内容

随机打开第8周,

1、家园共育的内容需要修改

2、右侧反思部分内容太少

修改过程:在第8周.docx里面直接修改。

将19周的第一页“横版周计划”内的家园共育和反思与调整“都修改一遍。

四、代码展示——设置教案里面的“重点提问”“小结”“过渡语”这几个词语”加粗

【办公类-22-13】周计划系列(5-4)“周计划-04 周计划表格内“小结”加粗 (2024年调整版本)-CSDN博客文章浏览阅读934次,点赞25次,收藏10次。【办公类-22-13】周计划系列(5-4)“周计划-04 周计划表格内“小结”加粗 (2024年调整版本)https://blog.csdn.net/reasonsummer/article/details/136706722



'''
docx教案的表格里的“重点提问”“过渡语”“小结”加粗
(使用【办公类-22-05】周计划系列(5)-Word关键词加粗(把所有“小结”“提问”的文字设置 的代码)
作者:VBA-守候、阿夏补充
时间:2024年3月14日
'''
import os,time
from docx import Document
from docx.enum.text import WD_BREAK
from docx.oxml.ns import nsdecls

from docx.oxml import OxmlElement
from docx.oxml.ns import qn

# 文件夹路
path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'



from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
 
old_word=['提问','小结','重点重点','过渡语']
new_word=['重点提问','小结','重点','过渡语']

print('-----第1步:把《04合成新周计划》里的资料复制到《06加粗测试)》-----')
#coding=utf-8
import os
import shutil

# old_path = path+r'\04合成新周计划'  # 要复制的文件所在目录
old_path = path+r'\04合成新周计划(修改补充版)'  # 要复制的文件所在目录

new_path = path+r'\06加粗测试'  #新路径

def FindFile(path):
    for ipath in os.listdir(path):
        fulldir = os.path.join(path, ipath)  # 拼接成绝对路径
        print(fulldir)         #打印相关后缀的文件路径及名称
        if os.path.isfile(fulldir):  # 文件,匹配->打印
            shutil.copy(fulldir,new_path)
        if os.path.isdir(fulldir):  # 目录,递归   
            FindFile(fulldir)

FindFile(old_path)

print('-----第2步:提取word路径-----')

from docx import Document
import os

pathall=[]
path =new_path 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

print('------第3步:每一份word替换----')

#————————————————
# 版权声明:本文为CSDN博主「VBA-守候」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# 原文链接:https://blog.csdn.net/qq_64613735/article/details/125552847
# 部分参数修改

for h in range(len(pathall)):    # 20份
    path=pathall[h]   
    
    
    wdApp = EnsureDispatch("Word.Application")
    # aDoc = wdApp.ActiveDocument # aDoc为当前文件
    # wdApp.Visible = False # 程序设置为不可见
    aDoc = wdApp.Documents.Open(path) # 打开已经存在的文件
    
    i = 0 
    # 文档里有多个几个表格
    for ta in aDoc.Tables: # 遍历表格,如果无需遍历,直接将ta指定为某个表格即可,如这样指定为第一个表格:ta = aDoc.Tables(1)
        # f为每个表格区域查找
        f = ta.Range.Find
    
        # 查找框参数
        f.ClearFormatting() # 清除原有格式
        f.Forward = True # 向前查找
        f.Format = True # 查找格式
        f.Wrap = constants.wdFindStop # 查找完成即停止
        f.MatchWildcards = True # 使用通配符,根据需要设置
        # f.Text = '[!^13^l::]{1,}[::]' # 查找的内容  冒号前面的 [!^13^l::]    1代表z只要替换一次,[::]代表冒号。冒号前面包括冒号需要改成加粗
        # f.Text = '[{}]{2,}'.format(old_word) # 查找的内容  2代表2个字小结,如果1 ,就会吧“小”开头的字全部替换为小结加粗,,提问会变成两次重点提问.但是这种写法无法用format,
        for w in range(len(old_word)):
            f.Text = '{}'.format(old_word[w]) # 旧内容重点提问
    
            # 替换框参数
            f.Replacement.ClearFormatting() # 清除原有格式
            # f.Replacement.Text = '^&' # 替换框内容
            f.Replacement.Text = '{}'.format(new_word[w]) # 替换框内容
            f.Replacement.Font.Bold = True # 替换文本设置为加粗
            f.Execute(Replace=constants.wdReplaceAll) # 执行,查找全部
        i += 1
    
    aDoc.SaveAs() # 保存并关闭文件,根据需要设置
    time.sleep(3)
    aDoc.Close() # 保存并关闭文件,根据需要设置
    time.sleep(1)
    print(f'完成,共替换了{i}个表格')

第一次word修改,转为加粗版,到此完成了。

五、再把“加粗测试”里面(word修改内容)数据导入“04-02 导出成为新学期的_周计划 (修改补充版)xlsx”,在用“”04合成新周计划(修改补充版)生成新的19份word。然后再加粗。

(一)提取19份word内容,导入EXCEL

从“06加粗测试”里面获得19份word

还是保存在“修改补充版”xls 里面

为了防止修改补充版以前的内容被替换,先复制一份备用

代码

from docx import Document

import os,time

from openpyxl import load_workbook
import glob
import re
import xlrd

pathall=[]
path =r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\06加粗测试'

 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

# 新建EXCEL
import xlwt 
f = xlwt.Workbook('encoding = utf-8')#设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True)#创建sheet工作表

# 写入标题

titleall=['grade', 'classnum', 'weekhan', 'datelong', 'day1', 'day2', 'day3', 'day4', 'day5', 'life', 'life1', 'life2',\
     'sportcon1', 'sportcon2', 'sportcon3', 'sportcon4', 'sportcon5', 'sport1', 'sport2', 'sport3', 'sport4', 'sport5',\
         'sportzd1', 'sportzd2', 'sportzd3', 'game1', 'game2', 'game3', 'game4', 'game5', 'gamezd1', 'gamezd2', \
            'theme', 'theme1', 'theme2', 'gbstudy', 'art', 'gbstudy1', 'gbstudy2', 'gbstudy3', 'jtstudy1', 'jtstudy2', 'jtstudy3', 'jtstudy4', 'jtstudy5', \
                'gy1', 'gy2', 'fk1', 'pj11', 'fk1nr', 'fk1tz', 'fk2', 'pj21', 'fk2nr', 'fk2tz', 'dateshort', 'weekshu', \
                    'title1', 'topic11', 'topic12', 'jy1', 'cl1', 'j1gc', \
                        'title2', 'topic21', 'topic22', 'jy2', 'cl2', 'j2gc', \
                            'title3', 'topic31', 'topic32', 'jy3', 'cl3', 'j3gc', \
                                'title4', 'topic41', 'topic42',  'jy4','cl4', 'j4gc',\
                                     'title5', 'topic51', 'topic52', 'jy5', 'cl5', 'j5gc',\
                                         'fs1', 'fs11', 'fs2', 'fs21','T1','T2','T3','T4','T5']
for l9 in range(len(titleall)):
    sheet1.write(0,l9,titleall[l9])

n=1

for h in range(len(pathall)):    # 19份19行
    LIST=[]
    path=pathall[h]

    doc = Document(path)
    
    # 获取第一行段落文字
    bt=doc.paragraphs[0].text
    
    # print(bt)
    # 中(5)班  第三周  活动安排
    LIST.append(bt[0])    # 添加年级
    LIST.append(bt[2])    # 添加班号
    if len(bt)==16:
        LIST.append(bt[8:9])    # 添加周次 大写 如果长度等于15 就是一位数汉字
    else:
        LIST.append(bt[8:10])

    # 获取第一行段落文字
    rq1=doc.paragraphs[1].text
    LIST.append(rq1[3:])    # 添加起止日期 
# print(LIST)

# ll=['grade','classnum','weekhan','datelong'.]



    # 获取所有表格对象
    tables = doc.tables
    # 获取word中第一个表格(周计划表)
    table = tables[0]


#     # print('-----提取第1张表格(周计划表)里面的内容----------')
    # 星期X
    for xq in range(3,8):
        xq1 = table.cell(0,xq).text        # K.append(k)        
        LIST.append(xq1)

    # 提取阿拉伯数字的周    
    # LIST.append(h+1)

#     
    # 生活名称
    l = table.cell(1,3).text
    # print(l)
    # 吃点心
    LIST.append(l)

    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,3).text.split('\n')
    # print(ll)
#    ['1.观察值日生在自主午餐环节中帮助阿姨分碗筷、毛巾的情况。', '2.提醒幼儿在自主午餐的过程中不说话,打喷嚏咳嗽要对外。']
    # 不要“1、”、“2、”
    L=[]
    for lll in range(2):    # 一共2条
        L.append(ll[lll][2:])      #    # 不要“1、”、“2、”
        LIST.append(ll[lll][2:])   
    # print(L)
    
#     # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 导入,做参考,需要调整
     # 集体游戏 
    for jt in range(3,8):
        jt1 = table.cell(3,jt).text        # K.append(k)        
        LIST.append(jt1)
    
     # 集体游戏 
    for jt2 in range(3,8):
        jt3 = table.cell(4,jt2).text        # K.append(k)        
        LIST.append(jt3)


    # 运动观察与指导(导入做参考,实际是自己写)
    s=table.cell(5,4).text.split('\n')
    # print(s)
#     # [1.'观察幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '2.观察幼儿是否能寻找皮球的多种玩法。', '3.提醒幼儿注意打曲棍干的安全。']
#     # 有些序号是自动编号,不占字数。
    S=[]
    for sss in range(3):    # 一共3条
        S.append(s[sss][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(s[sss][2:])
    # print(S)
#     # ['幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '幼儿是否能寻找皮球的多种玩法。', '提醒幼儿注意打曲棍干的安全。']

    # 游戏内容 角色游戏 导入做参考,每年都在更换 
    for fj in range(3,8):
        fj2 = table.cell(7,fj).text                
        LIST.append(fj2)

    # 游戏观察与指导(导入做参考,实际是自己写)
    g=table.cell(8,4).text.split('\n')
    # print(g)
    # ['1、观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '2、重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '3、观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']
    # 有些序号是自动编号,不占字数。
    G=[]
    for ggg in range(2):    # 一共3条
        G.append(g[ggg][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(g[ggg][2:]) 
    # print(G)
#     # ['观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']

    # 主题和主题说明
    ti=table.cell(9,4).text.split('\n')
#     print(ti)

    # ['春天来了', '1、了解春天是个万物生长的季节,关注自然环境的不断变化。', '2、感受大自然美丽的景像,以各种方式表达自己的情感与体验。']
    # 有些序号是自动编号,不占字数。
    T=[]# 第1个春天来了,不需要删除序号,直接添加
    T.append(ti[0])
    LIST.append(ti[0])
    for ttt in range(1,3):    # 一共2条主题说明
        T.append(ti[ttt][2:])         # 不要“1、”、“2、”、
        LIST.append(ti[ttt][2:])
    # print(T)
    # ['春天来了', '了解春天是个万物生长的季节,关注自然环境的不断变化。', '感受大自然美丽的景像,以各种方式表达自己的情感与体验。']

    # 个别化内容(3-5项) 一行多个,全部写入
    iiii=table.cell(10,4).text.split('\n')
    # print(iiii)     
    LIST.append(iiii)
    #  ['电风扇转起来了、漂亮的帽子、绿太阳、大雨小雨、做柳树等']

    # 美术专用活动室
    ii8=table.cell(11,4).text.split('\n')
    # print(iiii)     
    LIST.append(ii8)
    

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(12,4).text.split('\n')
    # print(ii)  
    # # ['1.观察幼儿组装各种小电风扇的情况,鼓励幼儿不断进行尝试。', '2.观察幼儿制作帽子的情况,提示幼儿尝试不同的材料进行装饰。', '3.观察幼儿在活动过程中的专注程度,鼓励幼儿专心做自己的事。'] 
    # # # 有些序号是自动编号,不占字数。
    I=[]
    for iii1 in range(3):    # 一共3条
        I.append(ii[iii1][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(ii[iii1][2:])
    # print(I)
    # # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']
   
    
    # 集体学习 横向五个格子
    K =[]
    for e in range(3,8):
        k = table.cell(13,e).text
        K.append(k)        
        LIST.append(k)
    # print(K)
    # # ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']

    
    # 家园共育(导入做参考,实际是自己写)    
    yy=table.cell(14,4).text.split('\n')
    # print(yy)
    # ['1、为春游活动做准备。', '2、在家长的帮助下学习折一些纸花。', '3、天气转暖,适当地为孩子减少衣服。']
    # 有些序号是自动编号,不占字数。删除2字符后,可能会少前面几个字
    Y=[]
    for yyy in range(2):    # 一共3条
        Y.append(yy[yyy][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(yy[yyy][2:])
    # print(Y)
    # ['为春游活动做准备。', '在家长的帮助下学习折一些纸花。', '天气转暖,适当地为孩子减少衣服。']
    

    # # 反馈与调整(变化很大)不导入
    ff=table.cell(1,8).text.split('\n')
    # print(ff)
    # print(h+1,len(ff))
    # # 8行
    
    
    for j in range(2):
        # 提取活动1
        LIST.append(ff[j*4][0:4])    
        # # 提取身份1
        LIST.append(ff[j*4][10:-1])
        # 提取反思1
        LIST.append(ff[j*4+1])
        # print(LIST)
    #     # # 提取调整1
        LIST.append(ff[j*4+3])
    # print(LIST)

    
    print('-----提取第2-5张表格(教案)里面的内容----------')
    

    # 获取第5行段落文字
    bt2=doc.paragraphs[5].text
    
    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('期')
    end_index = bt2.find('第')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date1 = bt2[start_index + 1: end_index].strip()
            print(date1)

    LIST.append(date1)    # 添加短日期

    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('(')
    end_index = bt2.find(')')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date2 = bt2[start_index + 1: end_index].strip()
            print(date2)



    LIST.append(date2)    # 添加添加周次
   
 

    for a in range(1,3): # 先提取2张表(  共有3张表,其中第1、2张表提取00和01,第3表提取00)  
        for b in range(2):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 

            # 有两张表
            all=table.cell(0,b).text.split('\n')
            print(len(all))
            # 看看表格里面的行数,如果等于1行(元宵节放假),就写6个空格
            if len(all)==1:
                for tt in range(6):
                    LIST.append('')
             # 看看表格里面的行数,如果大于1行,就不断写入内容
            else:
                # print(all)

                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)                
                
                # print(title)
                # 空中小屋等4个题目

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for to in range(2,4):    # 行数
                    mb=all[to][2:]
                    LIST.append(mb)

                    # topic.append(all[to][2:])
                    
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # ppt、故事录音

                # 提取活动过程
                pro=all[8:]
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    for a in range(3,4): # 最后提取第3张表的00部分
        for b in range(1):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 
            # 有两张表
            all=table.cell(0,b).text.split('\n')
            if len(all)==1:
                LIST.append('')

            # print(all)
            else:
                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)
                
                # print(title)
                # 空中小屋 只有一个标题

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for t in range(2,4):    # 行数
                    topic.append(all[t][2:])
                    LIST.append(all[t][2:])
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # 提取活动过程
                pro=all[8:]
                # print(pro)
                # # 这是列表样式
                # ['一、我家住几楼---导入主题,激起幼儿兴趣', '1、你们的家住在哪里?住在几楼?为什么买这么高?', '小结:是呀,住这么高的房子可以看到远远的风景。', '2、小狐狸也想住楼房,楼上的房间高高的,远远望去 
                # ,可以看见一片美景,那该多开心。', '二、房
                # 合并列表
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    
        for c in range(2):        # 表3的01有两个上下格子  表2有两个格子00 01
            table = tables[3]        # 表3
            
            # 有两张表
            fs=table.cell(c,1).text.split('\n')
            # print(fs)
            # 提取反思的课程名字
            # 提取活动名称(删除后面的执教人员)
            fstitle=fs[1][5:][:-6]
            # print(fstitle)
            LIST.append(fstitle)
        
            # 纯反思部分(第三行开始)    
            fs1=fs[2:]
            # print(fs1)
            fs3=[]
            for i in range(len(fs1)):
                fs4='         '+fs1[i]        # 主动添加缩进2字符
                # print(fs4)
                fs3.append(fs4)

            # 合并列表
            fs2='\n'.join(fs3)
            # print(fs2)
            LIST.append(fs2)

        # T1-T5

    extracted_texts = []

    # 遍历前5张表格
    for table in doc.tables[:5]:
        # 获取第1行单元格内容
        first_row_cells = table.rows[0].cells

        # 提取“执教:”和回车符之间的文字并去除空格
        for cell in first_row_cells:
            cell_text = cell.text.strip()
            if '执教:' in cell_text:
                start_index = cell_text.find('执教:') + len('执教:')
                end_index = cell_text.find('\n')
                extracted_text = cell_text[start_index:end_index].strip()
                extracted_texts.append(extracted_text)

    # 打印提取的文字
    for T in extracted_texts:
        print(T)    
        LIST.append(T)
        

        


        

# print(LIST)   
   
    for g in range(len(LIST)):
        # K =[1,3,4,6,8,10]#要写入的列表的值
        sheet1.write(n,g,LIST[g])#写入数据参数对应 行,列,值


        

    n+=1
f.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(修改补充版).xls')#保存.x1s到当前工作目录



修改过的word内容重新提取到xls

(二)生成新的19份docx

19份docx在“修改补充版”替换了原来的docx

代码展示

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os



# path=r'D:\\test\\02办公类\\90周计划4份\\01 信息窗'+'\\'
path = r"D:\test\02办公类\91周计划4份_2024年中4班\04 周计划"
print(path)

file_path=path+r'\04合成新周计划(修改补充版)'
print(file_path)


# 二、遍历excel,逐个生成word(WeeklyPlan.docx.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

# tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(修改补充版).xls')
# WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(仅导出部分).xls')


grade = WeeklyPlan["grade"].str.rstrip()
classnum =WeeklyPlan["classnum"] # 没有str.rstrip()是数字格式
weekhan =WeeklyPlan["weekhan"].str.rstrip() # str.rstrip()都是文字格式
# day=WeeklyPlan["day"].str.rstrip() 
# sc =WeeklyPlan["sc"].str.rstrip() 
datelong =WeeklyPlan["datelong"].str.rstrip() 

day1 = WeeklyPlan["day1"].str.rstrip() 
day2 = WeeklyPlan["day3"].str.rstrip() 
day3 = WeeklyPlan["day3"].str.rstrip() 
day4 = WeeklyPlan["day4"].str.rstrip() 
day5 = WeeklyPlan["day5"].str.rstrip() 

life = WeeklyPlan["life"].str.rstrip() 
life1 = WeeklyPlan["life1"].str.rstrip() 
life2 = WeeklyPlan["life2"].str.rstrip()
sportcon1 = WeeklyPlan["sportcon1"].str.rstrip() 
sportcon2 = WeeklyPlan["sportcon2"].str.rstrip()
sportcon3 = WeeklyPlan["sportcon3"].str.rstrip() 
sportcon4 = WeeklyPlan["sportcon4"].str.rstrip()
sportcon5 = WeeklyPlan["sportcon5"].str.rstrip() 

sport1 = WeeklyPlan["sport1"].str.rstrip() 
sport2 = WeeklyPlan["sport2"].str.rstrip() 
sport3 = WeeklyPlan["sport3"].str.rstrip() 
sport4 = WeeklyPlan["sport4"].str.rstrip() 
sport5 = WeeklyPlan["sport5"].str.rstrip() 
sportzd1 = WeeklyPlan["sportzd1"].str.rstrip() 
sportzd2 = WeeklyPlan["sportzd2"].str.rstrip()
sportzd3 = WeeklyPlan["sportzd3"].str.rstrip()
game1 = WeeklyPlan["game1"].str.rstrip() 
game2 = WeeklyPlan["game2"].str.rstrip() 
game3 = WeeklyPlan["game3"].str.rstrip() 
game4 = WeeklyPlan["game4"].str.rstrip() 
game5 = WeeklyPlan["game5"].str.rstrip() 
gamezd1 = WeeklyPlan["gamezd1"].str.rstrip() 
gamezd2 = WeeklyPlan["gamezd2"].str.rstrip() 
theme= WeeklyPlan["theme"].str.rstrip() 
theme1= WeeklyPlan["theme1"].str.rstrip() 
theme2= WeeklyPlan["theme2"].str.rstrip() 
gbstudy = WeeklyPlan["gbstudy"].str.rstrip()
art = WeeklyPlan["art"].str.rstrip()
gbstudy1 = WeeklyPlan["gbstudy1"].str.rstrip() 
gbstudy2 = WeeklyPlan["gbstudy2"].str.rstrip() 
gbstudy3 = WeeklyPlan["gbstudy3"].str.rstrip() 
jtstudy1 = WeeklyPlan["jtstudy1"].str.rstrip() 
jtstudy2 = WeeklyPlan["jtstudy2"].str.rstrip() 
jtstudy3 = WeeklyPlan["jtstudy3"].str.rstrip() 
jtstudy4 = WeeklyPlan["jtstudy4"].str.rstrip() 
jtstudy5 = WeeklyPlan["jtstudy5"].str.rstrip() 
gy1 = WeeklyPlan["gy1"].str.rstrip()
gy2 = WeeklyPlan["gy2"].str.rstrip()
fk1	= WeeklyPlan["fk1"].str.rstrip()
pj11 = WeeklyPlan["pj11"].str.rstrip()
fk1nr = WeeklyPlan["fk1nr"].str.rstrip()
fk1tz = WeeklyPlan["fk1tz"].str.rstrip()
fk2 = WeeklyPlan["fk2"].str.rstrip()
pj21= WeeklyPlan["pj21"].str.rstrip()
fk2nr = WeeklyPlan["fk2nr"].str.rstrip()
fk2tz = WeeklyPlan["fk2tz"].str.rstrip()

dateshort=WeeklyPlan["dateshort"].str.rstrip() 
weekshu=WeeklyPlan["weekshu"]# 没有str.rstrip()是数字格式

title1 = WeeklyPlan["title1"].str.rstrip()
topic11 = WeeklyPlan["topic11"].str.rstrip()
topic12 = WeeklyPlan["topic12"].str.rstrip()
jy1 = WeeklyPlan["jy1"].str.rstrip()
cl1 = WeeklyPlan["cl1"].str.rstrip()
j1gc= WeeklyPlan["j1gc"].str.rstrip()

title2 = WeeklyPlan["title2"].str.rstrip()
topic21 = WeeklyPlan["topic21"].str.rstrip()
topic22 = WeeklyPlan["topic22"].str.rstrip()
jy2 = WeeklyPlan["jy2"].str.rstrip()
cl2 = WeeklyPlan["cl2"].str.rstrip()
j2gc= WeeklyPlan["j2gc"].str.rstrip()

title3 = WeeklyPlan["title3"].str.rstrip()
topic31 = WeeklyPlan["topic31"].str.rstrip()
topic32 = WeeklyPlan["topic32"].str.rstrip()
jy3 = WeeklyPlan["jy3"].str.rstrip()
cl3 = WeeklyPlan["cl3"].str.rstrip()
j3gc= WeeklyPlan["j3gc"].str.rstrip()

title4 = WeeklyPlan["title4"].str.rstrip()
topic41 = WeeklyPlan["topic41"].str.rstrip()
topic42 = WeeklyPlan["topic42"].str.rstrip()
jy4 = WeeklyPlan["jy4"].str.rstrip()
cl4 = WeeklyPlan["cl4"].str.rstrip()
j4gc= WeeklyPlan["j4gc"].str.rstrip()

title5 = WeeklyPlan["title5"].str.rstrip()
topic51 = WeeklyPlan["topic51"].str.rstrip()
topic52 = WeeklyPlan["topic52"].str.rstrip()
jy5 = WeeklyPlan["jy5"].str.rstrip()
cl5 = WeeklyPlan["cl5"].str.rstrip()
j5gc= WeeklyPlan["j5gc"].str.rstrip()

fs1 = WeeklyPlan["fs1"].str.rstrip()
fs11= WeeklyPlan["fs11"].str.rstrip()
fs2= WeeklyPlan["fs2"].str.rstrip()
fs21= WeeklyPlan["fs21"].str.rstrip()

T1 = WeeklyPlan["T1"].str.rstrip() 
T2 = WeeklyPlan["T2"].str.rstrip()
T3 = WeeklyPlan["T3"].str.rstrip() 
T4 = WeeklyPlan["T4"].str.rstrip()
T5 = WeeklyPlan["T5"].str.rstrip()

# 遍历excel行,逐个生成
num = WeeklyPlan.shape[0]
print(num)
for i in range(num):
    context = {
        "grade": grade[i],
        "classnum": classnum[i],
        "weekhan": weekhan[i],
        # "day": day[i],
        # "sc": sc[i],
        "datelong": datelong[i],
        
        "day1": day1[i],
        "day2": day2[i],
        "day3": day3[i], 
        "day4": day4[i],
        "day5": day5[i],
        
        "life": life[i],
        "life1": life1[i],
        "life2": life2[i],
        "sportcon1": sportcon1[i],
        "sportcon2": sportcon2[i],
        "sportcon3": sportcon3[i],
        "sportcon4": sportcon4[i],
        "sportcon5": sportcon5[i],
        "weekshu": weekshu[i], 
        "sport1": sport1[i],
        "sport2": sport2[i],
        "sport3": sport3[i], 
        "sport4": sport4[i],
        "sport5": sport5[i],
        "sportzd1": sportzd1[i],  
        "sportzd2": sportzd2[i],
        "sportzd3": sportzd3[i],  
        "game1": game1[i],
        "game2": game2[i],
        "game3": game3[i], 
        "game4": game4[i],
        "game5": game5[i],
        "gamezd1": gamezd1[i],
        "gamezd2": gamezd2[i],
        "theme": theme[i],
        "theme1": theme1[i],
        "theme2": theme2[i],
        "gbstudy": gbstudy[i],
        "art": art[i],
        "gbstudy1": gbstudy1[i], 
        "gbstudy2": gbstudy2[i], 
        "gbstudy3": gbstudy3[i], 
        "jtstudy1": jtstudy1[i],
        "jtstudy2": jtstudy2[i],
        "jtstudy3": jtstudy3[i],  
        "jtstudy4": jtstudy4[i],
        "jtstudy5": jtstudy5[i],  
        "gy1": gy1[i],
        "gy2": gy2[i],
        "fk1": fk1[i],
        "pj11": pj11[i], 
        "fk1nr": fk1nr[i],
        "fk1tz": fk1tz[i],
        "fk2": fk2[i],
        "pj21": pj21[i],
        "fk2nr": fk2nr[i],
        "fk2tz":fk2tz[i], 

        "dateshort": dateshort[i],
        "weekshu": weekshu[i], 

        "title1":title1[i],   
        "topic11":topic11[i],   
        "topic12":topic12[i],   
        "jy1":jy1[i],   
        "cl1":cl1[i],
        "j1gc": j1gc[i],
        "title2":title2[i],   
        "topic21":topic21[i],   
        "topic22":topic22[i],   
        "jy2":jy2[i],   
        "cl2":cl2[i],   
        "j2gc": j2gc[i],
        "title3":title3[i],   
        "topic31":topic31[i],   
        "topic32":topic32[i],   
        "jy3":jy3[i],   
        "cl3":cl3[i],   
        "j3gc": j3gc[i],
        "title4":title4[i],   
        "topic41":topic41[i],   
        "topic42":topic42[i],   
        "jy4":jy4[i],   
        "cl4":cl4[i] ,  
        "j4gc": j4gc[i],
        "title5":title5[i],   
        "topic51":topic51[i],   
        "topic52":topic52[i],   
        "jy5":jy5[i],   
        "cl5":cl5[i]  ,
        "j5gc": j5gc[i],
        "fs1": fs1[i],
        "fs11": fs11[i],
        "fs2": fs2[i],
        "fs21": fs21[i]	,

       
        "T1": T1[i],  
        "T2": T2[i],	
        "T3": T3[i],  
        "T4": T4[i],
        "T5": T5[i],  																
    
    }
    tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{} 第{}周 周计划 {}({})({}{}班下学期).docx".format('%02d'%weekshu[i],str(weekhan[i]),theme[i],datelong[i],grade[i],classnum[i]))

新的19周.docx的内容,查看第八周的家园共育与反思调整是否改过了.

补充的内容被写入EXCEL,同时生成新的docx页面内容

但是教案部分的“加粗”不见了,所以还是要进行加粗代码运行

(三)教案部分加粗



'''
docx教案的表格里的“重点提问”“过渡语”“小结”加粗
(使用【办公类-22-05】周计划系列(5)-Word关键词加粗(把所有“小结”“提问”的文字设置 的代码)
作者:VBA-守候、阿夏补充
时间:2024年3月14日
'''
import os,time
from docx import Document
from docx.enum.text import WD_BREAK
from docx.oxml.ns import nsdecls

from docx.oxml import OxmlElement
from docx.oxml.ns import qn

# 文件夹路
path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'



from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
 
old_word=['提问','小结','重点重点','过渡语']
new_word=['重点提问','小结','重点','过渡语']

print('-----第1步:把《04合成新周计划》里的资料复制到《06加粗测试)》-----')
#coding=utf-8
import os
import shutil

# old_path = path+r'\04合成新周计划'  # 要复制的文件所在目录
old_path = path+r'\04合成新周计划(修改补充版)'  # 要复制的文件所在目录

new_path = path+r'\06加粗测试'  #新路径

def FindFile(path):
    for ipath in os.listdir(path):
        fulldir = os.path.join(path, ipath)  # 拼接成绝对路径
        print(fulldir)         #打印相关后缀的文件路径及名称
        if os.path.isfile(fulldir):  # 文件,匹配->打印
            shutil.copy(fulldir,new_path)
        if os.path.isdir(fulldir):  # 目录,递归   
            FindFile(fulldir)

FindFile(old_path)

print('-----第2步:提取word路径-----')

from docx import Document
import os

pathall=[]
path =new_path 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

print('------第3步:每一份word替换----')

#————————————————
# 版权声明:本文为CSDN博主「VBA-守候」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# 原文链接:https://blog.csdn.net/qq_64613735/article/details/125552847
# 部分参数修改

for h in range(len(pathall)):    # 20份
    path=pathall[h]   
    
    
    wdApp = EnsureDispatch("Word.Application")
    # aDoc = wdApp.ActiveDocument # aDoc为当前文件
    # wdApp.Visible = False # 程序设置为不可见
    aDoc = wdApp.Documents.Open(path) # 打开已经存在的文件
    
    i = 0 
    # 文档里有多个几个表格
    for ta in aDoc.Tables: # 遍历表格,如果无需遍历,直接将ta指定为某个表格即可,如这样指定为第一个表格:ta = aDoc.Tables(1)
        # f为每个表格区域查找
        f = ta.Range.Find
    
        # 查找框参数
        f.ClearFormatting() # 清除原有格式
        f.Forward = True # 向前查找
        f.Format = True # 查找格式
        f.Wrap = constants.wdFindStop # 查找完成即停止
        f.MatchWildcards = True # 使用通配符,根据需要设置
        # f.Text = '[!^13^l::]{1,}[::]' # 查找的内容  冒号前面的 [!^13^l::]    1代表z只要替换一次,[::]代表冒号。冒号前面包括冒号需要改成加粗
        # f.Text = '[{}]{2,}'.format(old_word) # 查找的内容  2代表2个字小结,如果1 ,就会吧“小”开头的字全部替换为小结加粗,,提问会变成两次重点提问.但是这种写法无法用format,
        for w in range(len(old_word)):
            f.Text = '{}'.format(old_word[w]) # 旧内容重点提问
    
            # 替换框参数
            f.Replacement.ClearFormatting() # 清除原有格式
            # f.Replacement.Text = '^&' # 替换框内容
            f.Replacement.Text = '{}'.format(new_word[w]) # 替换框内容
            f.Replacement.Font.Bold = True # 替换文本设置为加粗
            f.Execute(Replace=constants.wdReplaceAll) # 执行,查找全部
        i += 1
    
    aDoc.SaveAs() # 保存并关闭文件,根据需要设置
    time.sleep(3)
    aDoc.Close() # 保存并关闭文件,根据需要设置
    time.sleep(1)
    print(f'完成,共替换了{i}个表格')

加粗需要一定时间。

最后开始不断循环操作

加粗完成,就在“06加粗测试”,里面继续对周计划.docx的反思、育儿部分、教案、部分进行文字修改,然后反复执行以下三个p直到将全部教案格式内容优化完成。

将以上三条的内容合并再一个py内,为“内容循环修改”做准备

代码展示


'''
加粗测试里的19份docx内容写入 修改补充版.xlsx  生成新学期周计划19个docx,放在“修改补充版”文件夹里,再加粗文字,放到“加粗测试”里
作者:AI对话大师  VBA守候 阿夏
时间:20240323
'''
from docx import Document

import os,time

from openpyxl import load_workbook
import glob
import re
import xlrd

pathall=[]
path =r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\06加粗测试'

 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

# 新建EXCEL
import xlwt 
f = xlwt.Workbook('encoding = utf-8')#设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True)#创建sheet工作表

# 写入标题

titleall=['grade', 'classnum', 'weekhan', 'datelong', 'day1', 'day2', 'day3', 'day4', 'day5', 'life', 'life1', 'life2',\
     'sportcon1', 'sportcon2', 'sportcon3', 'sportcon4', 'sportcon5', 'sport1', 'sport2', 'sport3', 'sport4', 'sport5',\
         'sportzd1', 'sportzd2', 'sportzd3', 'game1', 'game2', 'game3', 'game4', 'game5', 'gamezd1', 'gamezd2', \
            'theme', 'theme1', 'theme2', 'gbstudy', 'art', 'gbstudy1', 'gbstudy2', 'gbstudy3', 'jtstudy1', 'jtstudy2', 'jtstudy3', 'jtstudy4', 'jtstudy5', \
                'gy1', 'gy2', 'fk1', 'pj11', 'fk1nr', 'fk1tz', 'fk2', 'pj21', 'fk2nr', 'fk2tz', 'dateshort', 'weekshu', \
                    'title1', 'topic11', 'topic12', 'jy1', 'cl1', 'j1gc', \
                        'title2', 'topic21', 'topic22', 'jy2', 'cl2', 'j2gc', \
                            'title3', 'topic31', 'topic32', 'jy3', 'cl3', 'j3gc', \
                                'title4', 'topic41', 'topic42',  'jy4','cl4', 'j4gc',\
                                     'title5', 'topic51', 'topic52', 'jy5', 'cl5', 'j5gc',\
                                         'fs1', 'fs11', 'fs2', 'fs21','T1','T2','T3','T4','T5']
for l9 in range(len(titleall)):
    sheet1.write(0,l9,titleall[l9])

n=1

for h in range(len(pathall)):    # 19份19行
    LIST=[]
    path=pathall[h]

    doc = Document(path)
    
    # 获取第一行段落文字
    bt=doc.paragraphs[0].text
    
    # print(bt)
    # 中(5)班  第三周  活动安排
    LIST.append(bt[0])    # 添加年级
    LIST.append(bt[2])    # 添加班号
    if len(bt)==16:
        LIST.append(bt[8:9])    # 添加周次 大写 如果长度等于15 就是一位数汉字
    else:
        LIST.append(bt[8:10])

    # 获取第一行段落文字
    rq1=doc.paragraphs[1].text
    LIST.append(rq1[3:])    # 添加起止日期 
# print(LIST)

# ll=['grade','classnum','weekhan','datelong'.]



    # 获取所有表格对象
    tables = doc.tables
    # 获取word中第一个表格(周计划表)
    table = tables[0]


#     # print('-----提取第1张表格(周计划表)里面的内容----------')
    # 星期X
    for xq in range(3,8):
        xq1 = table.cell(0,xq).text        # K.append(k)        
        LIST.append(xq1)

    # 提取阿拉伯数字的周    
    # LIST.append(h+1)

#     
    # 生活名称
    l = table.cell(1,3).text
    # print(l)
    # 吃点心
    LIST.append(l)

    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,3).text.split('\n')
    # print(ll)
#    ['1.观察值日生在自主午餐环节中帮助阿姨分碗筷、毛巾的情况。', '2.提醒幼儿在自主午餐的过程中不说话,打喷嚏咳嗽要对外。']
    # 不要“1、”、“2、”
    L=[]
    for lll in range(2):    # 一共2条
        L.append(ll[lll][2:])      #    # 不要“1、”、“2、”
        LIST.append(ll[lll][2:])   
    # print(L)
    
#     # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 导入,做参考,需要调整
     # 集体游戏 
    for jt in range(3,8):
        jt1 = table.cell(3,jt).text        # K.append(k)        
        LIST.append(jt1)
    
     # 集体游戏 
    for jt2 in range(3,8):
        jt3 = table.cell(4,jt2).text        # K.append(k)        
        LIST.append(jt3)


    # 运动观察与指导(导入做参考,实际是自己写)
    s=table.cell(5,4).text.split('\n')
    # print(s)
#     # [1.'观察幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '2.观察幼儿是否能寻找皮球的多种玩法。', '3.提醒幼儿注意打曲棍干的安全。']
#     # 有些序号是自动编号,不占字数。
    S=[]
    for sss in range(3):    # 一共3条
        S.append(s[sss][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(s[sss][2:])
    # print(S)
#     # ['幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '幼儿是否能寻找皮球的多种玩法。', '提醒幼儿注意打曲棍干的安全。']

    # 游戏内容 角色游戏 导入做参考,每年都在更换 
    for fj in range(3,8):
        fj2 = table.cell(7,fj).text                
        LIST.append(fj2)

    # 游戏观察与指导(导入做参考,实际是自己写)
    g=table.cell(8,4).text.split('\n')
    # print(g)
    # ['1、观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '2、重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '3、观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']
    # 有些序号是自动编号,不占字数。
    G=[]
    for ggg in range(2):    # 一共3条
        G.append(g[ggg][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(g[ggg][2:]) 
    # print(G)
#     # ['观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']

    # 主题和主题说明
    ti=table.cell(9,4).text.split('\n')
#     print(ti)

    # ['春天来了', '1、了解春天是个万物生长的季节,关注自然环境的不断变化。', '2、感受大自然美丽的景像,以各种方式表达自己的情感与体验。']
    # 有些序号是自动编号,不占字数。
    T=[]# 第1个春天来了,不需要删除序号,直接添加
    T.append(ti[0])
    LIST.append(ti[0])
    for ttt in range(1,3):    # 一共2条主题说明
        T.append(ti[ttt][2:])         # 不要“1、”、“2、”、
        LIST.append(ti[ttt][2:])
    # print(T)
    # ['春天来了', '了解春天是个万物生长的季节,关注自然环境的不断变化。', '感受大自然美丽的景像,以各种方式表达自己的情感与体验。']

    # 个别化内容(3-5项) 一行多个,全部写入
    iiii=table.cell(10,4).text.split('\n')
    # print(iiii)     
    LIST.append(iiii)
    #  ['电风扇转起来了、漂亮的帽子、绿太阳、大雨小雨、做柳树等']

    # 美术专用活动室
    ii8=table.cell(11,4).text.split('\n')
    # print(iiii)     
    LIST.append(ii8)
    

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(12,4).text.split('\n')
    # print(ii)  
    # # ['1.观察幼儿组装各种小电风扇的情况,鼓励幼儿不断进行尝试。', '2.观察幼儿制作帽子的情况,提示幼儿尝试不同的材料进行装饰。', '3.观察幼儿在活动过程中的专注程度,鼓励幼儿专心做自己的事。'] 
    # # # 有些序号是自动编号,不占字数。
    I=[]
    for iii1 in range(3):    # 一共3条
        I.append(ii[iii1][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(ii[iii1][2:])
    # print(I)
    # # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']
   
    
    # 集体学习 横向五个格子
    K =[]
    for e in range(3,8):
        k = table.cell(13,e).text
        K.append(k)        
        LIST.append(k)
    # print(K)
    # # ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']

    
    # 家园共育(导入做参考,实际是自己写)    
    yy=table.cell(14,4).text.split('\n')
    # print(yy)
    # ['1、为春游活动做准备。', '2、在家长的帮助下学习折一些纸花。', '3、天气转暖,适当地为孩子减少衣服。']
    # 有些序号是自动编号,不占字数。删除2字符后,可能会少前面几个字
    Y=[]
    for yyy in range(2):    # 一共3条
        Y.append(yy[yyy][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(yy[yyy][2:])
    # print(Y)
    # ['为春游活动做准备。', '在家长的帮助下学习折一些纸花。', '天气转暖,适当地为孩子减少衣服。']
    

    # # 反馈与调整(变化很大)不导入
    ff=table.cell(1,8).text.split('\n')
    # print(ff)
    # print(h+1,len(ff))
    # # 8行
    
    
    for j in range(2):
        # 提取活动1
        LIST.append(ff[j*4][0:4])    
        # # 提取身份1
        LIST.append(ff[j*4][10:-1])
        # 提取反思1
        LIST.append(ff[j*4+1])
        # print(LIST)
    #     # # 提取调整1
        LIST.append(ff[j*4+3])
    # print(LIST)

    
    print('-----提取第2-5张表格(教案)里面的内容----------')
    

    # 获取第5行段落文字
    bt2=doc.paragraphs[5].text
    
    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('期')
    end_index = bt2.find('第')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date1 = bt2[start_index + 1: end_index].strip()
            print(date1)

    LIST.append(date1)    # 添加短日期

    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('(')
    end_index = bt2.find(')')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date2 = bt2[start_index + 1: end_index].strip()
            print(date2)



    LIST.append(date2)    # 添加添加周次
   
 

    for a in range(1,3): # 先提取2张表(  共有3张表,其中第1、2张表提取00和01,第3表提取00)  
        for b in range(2):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 

            # 有两张表
            all=table.cell(0,b).text.split('\n')
            print(len(all))
            # 看看表格里面的行数,如果等于1行(元宵节放假),就写6个空格
            if len(all)==1:
                for tt in range(6):
                    LIST.append('')
             # 看看表格里面的行数,如果大于1行,就不断写入内容
            else:
                # print(all)

                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)                
                
                # print(title)
                # 空中小屋等4个题目

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for to in range(2,4):    # 行数
                    mb=all[to][2:]
                    LIST.append(mb)

                    # topic.append(all[to][2:])
                    
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # ppt、故事录音

                # 提取活动过程
                pro=all[8:]
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    for a in range(3,4): # 最后提取第3张表的00部分
        for b in range(1):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 
            # 有两张表
            all=table.cell(0,b).text.split('\n')
            if len(all)==1:
                LIST.append('')

            # print(all)
            else:
                # 提取活动名称(删除后面的执教人员)
                title=all[0][5:][:-6]
                title1 = title.replace(" ", "")
                LIST.append(title1)
                
                # print(title)
                # 空中小屋 只有一个标题

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for t in range(2,4):    # 行数
                    topic.append(all[t][2:])
                    LIST.append(all[t][2:])
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # 提取活动过程
                pro=all[8:]
                # print(pro)
                # # 这是列表样式
                # ['一、我家住几楼---导入主题,激起幼儿兴趣', '1、你们的家住在哪里?住在几楼?为什么买这么高?', '小结:是呀,住这么高的房子可以看到远远的风景。', '2、小狐狸也想住楼房,楼上的房间高高的,远远望去 
                # ,可以看见一片美景,那该多开心。', '二、房
                # 合并列表
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    
        for c in range(2):        # 表3的01有两个上下格子  表2有两个格子00 01
            table = tables[3]        # 表3
            
            # 有两张表
            fs=table.cell(c,1).text.split('\n')
            # print(fs)
            # 提取反思的课程名字
            # 提取活动名称(删除后面的执教人员)
            fstitle=fs[1][5:][:-6]
            # print(fstitle)
            LIST.append(fstitle)
        
            # 纯反思部分(第三行开始)    
            fs1=fs[2:]
            # print(fs1)
            fs3=[]
            for i in range(len(fs1)):
                fs4='         '+fs1[i]        # 主动添加缩进2字符
                # print(fs4)
                fs3.append(fs4)

            # 合并列表
            fs2='\n'.join(fs3)
            # print(fs2)
            LIST.append(fs2)

        # T1-T5

    extracted_texts = []

    # 遍历前5张表格
    for table in doc.tables[:5]:
        # 获取第1行单元格内容
        first_row_cells = table.rows[0].cells

        # 提取“执教:”和回车符之间的文字并去除空格
        for cell in first_row_cells:
            cell_text = cell.text.strip()
            if '执教:' in cell_text:
                start_index = cell_text.find('执教:') + len('执教:')
                end_index = cell_text.find('\n')
                extracted_text = cell_text[start_index:end_index].strip()
                extracted_texts.append(extracted_text)

    # 打印提取的文字
    for T in extracted_texts:
        print(T)    
        LIST.append(T)
        

        


        

# print(LIST)   
   
    for g in range(len(LIST)):
        # K =[1,3,4,6,8,10]#要写入的列表的值
        sheet1.write(n,g,LIST[g])#写入数据参数对应 行,列,值


        

    n+=1
f.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(修改补充版).xls')#保存.x1s到当前工作目录



time.sleep(2)

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os



# path=r'D:\\test\\02办公类\\90周计划4份\\01 信息窗'+'\\'
path = r"D:\test\02办公类\91周计划4份_2024年中4班\04 周计划"
print(path)

file_path=path+r'\04合成新周计划(修改补充版)'
print(file_path)


# 二、遍历excel,逐个生成word(WeeklyPlan.docx.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

# tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(修改补充版).xls')
# WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(仅导出部分).xls')


grade = WeeklyPlan["grade"].str.rstrip()
classnum =WeeklyPlan["classnum"] # 没有str.rstrip()是数字格式
weekhan =WeeklyPlan["weekhan"].str.rstrip() # str.rstrip()都是文字格式
# day=WeeklyPlan["day"].str.rstrip() 
# sc =WeeklyPlan["sc"].str.rstrip() 
datelong =WeeklyPlan["datelong"].str.rstrip() 

day1 = WeeklyPlan["day1"].str.rstrip() 
day2 = WeeklyPlan["day3"].str.rstrip() 
day3 = WeeklyPlan["day3"].str.rstrip() 
day4 = WeeklyPlan["day4"].str.rstrip() 
day5 = WeeklyPlan["day5"].str.rstrip() 

life = WeeklyPlan["life"].str.rstrip() 
life1 = WeeklyPlan["life1"].str.rstrip() 
life2 = WeeklyPlan["life2"].str.rstrip()
sportcon1 = WeeklyPlan["sportcon1"].str.rstrip() 
sportcon2 = WeeklyPlan["sportcon2"].str.rstrip()
sportcon3 = WeeklyPlan["sportcon3"].str.rstrip() 
sportcon4 = WeeklyPlan["sportcon4"].str.rstrip()
sportcon5 = WeeklyPlan["sportcon5"].str.rstrip() 

sport1 = WeeklyPlan["sport1"].str.rstrip() 
sport2 = WeeklyPlan["sport2"].str.rstrip() 
sport3 = WeeklyPlan["sport3"].str.rstrip() 
sport4 = WeeklyPlan["sport4"].str.rstrip() 
sport5 = WeeklyPlan["sport5"].str.rstrip() 
sportzd1 = WeeklyPlan["sportzd1"].str.rstrip() 
sportzd2 = WeeklyPlan["sportzd2"].str.rstrip()
sportzd3 = WeeklyPlan["sportzd3"].str.rstrip()
game1 = WeeklyPlan["game1"].str.rstrip() 
game2 = WeeklyPlan["game2"].str.rstrip() 
game3 = WeeklyPlan["game3"].str.rstrip() 
game4 = WeeklyPlan["game4"].str.rstrip() 
game5 = WeeklyPlan["game5"].str.rstrip() 
gamezd1 = WeeklyPlan["gamezd1"].str.rstrip() 
gamezd2 = WeeklyPlan["gamezd2"].str.rstrip() 
theme= WeeklyPlan["theme"].str.rstrip() 
theme1= WeeklyPlan["theme1"].str.rstrip() 
theme2= WeeklyPlan["theme2"].str.rstrip() 
gbstudy = WeeklyPlan["gbstudy"].str.rstrip()
art = WeeklyPlan["art"].str.rstrip()
gbstudy1 = WeeklyPlan["gbstudy1"].str.rstrip() 
gbstudy2 = WeeklyPlan["gbstudy2"].str.rstrip() 
gbstudy3 = WeeklyPlan["gbstudy3"].str.rstrip() 
jtstudy1 = WeeklyPlan["jtstudy1"].str.rstrip() 
jtstudy2 = WeeklyPlan["jtstudy2"].str.rstrip() 
jtstudy3 = WeeklyPlan["jtstudy3"].str.rstrip() 
jtstudy4 = WeeklyPlan["jtstudy4"].str.rstrip() 
jtstudy5 = WeeklyPlan["jtstudy5"].str.rstrip() 
gy1 = WeeklyPlan["gy1"].str.rstrip()
gy2 = WeeklyPlan["gy2"].str.rstrip()
fk1	= WeeklyPlan["fk1"].str.rstrip()
pj11 = WeeklyPlan["pj11"].str.rstrip()
fk1nr = WeeklyPlan["fk1nr"].str.rstrip()
fk1tz = WeeklyPlan["fk1tz"].str.rstrip()
fk2 = WeeklyPlan["fk2"].str.rstrip()
pj21= WeeklyPlan["pj21"].str.rstrip()
fk2nr = WeeklyPlan["fk2nr"].str.rstrip()
fk2tz = WeeklyPlan["fk2tz"].str.rstrip()

dateshort=WeeklyPlan["dateshort"].str.rstrip() 
weekshu=WeeklyPlan["weekshu"]# 没有str.rstrip()是数字格式

title1 = WeeklyPlan["title1"].str.rstrip()
topic11 = WeeklyPlan["topic11"].str.rstrip()
topic12 = WeeklyPlan["topic12"].str.rstrip()
jy1 = WeeklyPlan["jy1"].str.rstrip()
cl1 = WeeklyPlan["cl1"].str.rstrip()
j1gc= WeeklyPlan["j1gc"].str.rstrip()

title2 = WeeklyPlan["title2"].str.rstrip()
topic21 = WeeklyPlan["topic21"].str.rstrip()
topic22 = WeeklyPlan["topic22"].str.rstrip()
jy2 = WeeklyPlan["jy2"].str.rstrip()
cl2 = WeeklyPlan["cl2"].str.rstrip()
j2gc= WeeklyPlan["j2gc"].str.rstrip()

title3 = WeeklyPlan["title3"].str.rstrip()
topic31 = WeeklyPlan["topic31"].str.rstrip()
topic32 = WeeklyPlan["topic32"].str.rstrip()
jy3 = WeeklyPlan["jy3"].str.rstrip()
cl3 = WeeklyPlan["cl3"].str.rstrip()
j3gc= WeeklyPlan["j3gc"].str.rstrip()

title4 = WeeklyPlan["title4"].str.rstrip()
topic41 = WeeklyPlan["topic41"].str.rstrip()
topic42 = WeeklyPlan["topic42"].str.rstrip()
jy4 = WeeklyPlan["jy4"].str.rstrip()
cl4 = WeeklyPlan["cl4"].str.rstrip()
j4gc= WeeklyPlan["j4gc"].str.rstrip()

title5 = WeeklyPlan["title5"].str.rstrip()
topic51 = WeeklyPlan["topic51"].str.rstrip()
topic52 = WeeklyPlan["topic52"].str.rstrip()
jy5 = WeeklyPlan["jy5"].str.rstrip()
cl5 = WeeklyPlan["cl5"].str.rstrip()
j5gc= WeeklyPlan["j5gc"].str.rstrip()

fs1 = WeeklyPlan["fs1"].str.rstrip()
fs11= WeeklyPlan["fs11"].str.rstrip()
fs2= WeeklyPlan["fs2"].str.rstrip()
fs21= WeeklyPlan["fs21"].str.rstrip()

T1 = WeeklyPlan["T1"].str.rstrip() 
T2 = WeeklyPlan["T2"].str.rstrip()
T3 = WeeklyPlan["T3"].str.rstrip() 
T4 = WeeklyPlan["T4"].str.rstrip()
T5 = WeeklyPlan["T5"].str.rstrip()

# 遍历excel行,逐个生成
num = WeeklyPlan.shape[0]
print(num)
for i in range(num):
    context = {
        "grade": grade[i],
        "classnum": classnum[i],
        "weekhan": weekhan[i],
        # "day": day[i],
        # "sc": sc[i],
        "datelong": datelong[i],
        
        "day1": day1[i],
        "day2": day2[i],
        "day3": day3[i], 
        "day4": day4[i],
        "day5": day5[i],
        
        "life": life[i],
        "life1": life1[i],
        "life2": life2[i],
        "sportcon1": sportcon1[i],
        "sportcon2": sportcon2[i],
        "sportcon3": sportcon3[i],
        "sportcon4": sportcon4[i],
        "sportcon5": sportcon5[i],
        "weekshu": weekshu[i], 
        "sport1": sport1[i],
        "sport2": sport2[i],
        "sport3": sport3[i], 
        "sport4": sport4[i],
        "sport5": sport5[i],
        "sportzd1": sportzd1[i],  
        "sportzd2": sportzd2[i],
        "sportzd3": sportzd3[i],  
        "game1": game1[i],
        "game2": game2[i],
        "game3": game3[i], 
        "game4": game4[i],
        "game5": game5[i],
        "gamezd1": gamezd1[i],
        "gamezd2": gamezd2[i],
        "theme": theme[i],
        "theme1": theme1[i],
        "theme2": theme2[i],
        "gbstudy": gbstudy[i],
        "art": art[i],
        "gbstudy1": gbstudy1[i], 
        "gbstudy2": gbstudy2[i], 
        "gbstudy3": gbstudy3[i], 
        "jtstudy1": jtstudy1[i],
        "jtstudy2": jtstudy2[i],
        "jtstudy3": jtstudy3[i],  
        "jtstudy4": jtstudy4[i],
        "jtstudy5": jtstudy5[i],  
        "gy1": gy1[i],
        "gy2": gy2[i],
        "fk1": fk1[i],
        "pj11": pj11[i], 
        "fk1nr": fk1nr[i],
        "fk1tz": fk1tz[i],
        "fk2": fk2[i],
        "pj21": pj21[i],
        "fk2nr": fk2nr[i],
        "fk2tz":fk2tz[i], 

        "dateshort": dateshort[i],
        "weekshu": weekshu[i], 

        "title1":title1[i],   
        "topic11":topic11[i],   
        "topic12":topic12[i],   
        "jy1":jy1[i],   
        "cl1":cl1[i],
        "j1gc": j1gc[i],
        "title2":title2[i],   
        "topic21":topic21[i],   
        "topic22":topic22[i],   
        "jy2":jy2[i],   
        "cl2":cl2[i],   
        "j2gc": j2gc[i],
        "title3":title3[i],   
        "topic31":topic31[i],   
        "topic32":topic32[i],   
        "jy3":jy3[i],   
        "cl3":cl3[i],   
        "j3gc": j3gc[i],
        "title4":title4[i],   
        "topic41":topic41[i],   
        "topic42":topic42[i],   
        "jy4":jy4[i],   
        "cl4":cl4[i] ,  
        "j4gc": j4gc[i],
        "title5":title5[i],   
        "topic51":topic51[i],   
        "topic52":topic52[i],   
        "jy5":jy5[i],   
        "cl5":cl5[i]  ,
        "j5gc": j5gc[i],
        "fs1": fs1[i],
        "fs11": fs11[i],
        "fs2": fs2[i],
        "fs21": fs21[i]	,

       
        "T1": T1[i],  
        "T2": T2[i],	
        "T3": T3[i],  
        "T4": T4[i],
        "T5": T5[i],  																
    
    }
    tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{} 第{}周 周计划 {}({})({}{}班下学期).docx".format('%02d'%weekshu[i],str(weekhan[i]),theme[i],datelong[i],grade[i],classnum[i]))

time.sleep(2)



'''
docx教案的表格里的“重点提问”“过渡语”“小结”加粗
(使用【办公类-22-05】周计划系列(5)-Word关键词加粗(把所有“小结”“提问”的文字设置 的代码)
作者:VBA-守候、阿夏补充
时间:2024年3月14日
'''
import os,time
from docx import Document
from docx.enum.text import WD_BREAK
from docx.oxml.ns import nsdecls

from docx.oxml import OxmlElement
from docx.oxml.ns import qn

# 文件夹路
path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'



from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
 
old_word=['提问','小结','重点重点','过渡语']
new_word=['重点提问','小结','重点','过渡语']

print('-----第1步:把《04合成新周计划》里的资料复制到《06加粗测试)》-----')
#coding=utf-8
import os
import shutil

# old_path = path+r'\04合成新周计划'  # 要复制的文件所在目录
old_path = path+r'\04合成新周计划(修改补充版)'  # 要复制的文件所在目录

new_path = path+r'\06加粗测试'  #新路径

def FindFile(path):
    for ipath in os.listdir(path):
        fulldir = os.path.join(path, ipath)  # 拼接成绝对路径
        print(fulldir)         #打印相关后缀的文件路径及名称
        if os.path.isfile(fulldir):  # 文件,匹配->打印
            shutil.copy(fulldir,new_path)
        if os.path.isdir(fulldir):  # 目录,递归   
            FindFile(fulldir)

FindFile(old_path)

print('-----第2步:提取word路径-----')

from docx import Document
import os

pathall=[]
path =new_path 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

print('------第3步:每一份word替换----')

#————————————————
# 版权声明:本文为CSDN博主「VBA-守候」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# 原文链接:https://blog.csdn.net/qq_64613735/article/details/125552847
# 部分参数修改

for h in range(len(pathall)):    # 20份
    path=pathall[h]   
    
    
    wdApp = EnsureDispatch("Word.Application")
    # aDoc = wdApp.ActiveDocument # aDoc为当前文件
    # wdApp.Visible = False # 程序设置为不可见
    aDoc = wdApp.Documents.Open(path) # 打开已经存在的文件
    
    i = 0 
    # 文档里有多个几个表格
    for ta in aDoc.Tables: # 遍历表格,如果无需遍历,直接将ta指定为某个表格即可,如这样指定为第一个表格:ta = aDoc.Tables(1)
        # f为每个表格区域查找
        f = ta.Range.Find
    
        # 查找框参数
        f.ClearFormatting() # 清除原有格式
        f.Forward = True # 向前查找
        f.Format = True # 查找格式
        f.Wrap = constants.wdFindStop # 查找完成即停止
        f.MatchWildcards = True # 使用通配符,根据需要设置
        # f.Text = '[!^13^l::]{1,}[::]' # 查找的内容  冒号前面的 [!^13^l::]    1代表z只要替换一次,[::]代表冒号。冒号前面包括冒号需要改成加粗
        # f.Text = '[{}]{2,}'.format(old_word) # 查找的内容  2代表2个字小结,如果1 ,就会吧“小”开头的字全部替换为小结加粗,,提问会变成两次重点提问.但是这种写法无法用format,
        for w in range(len(old_word)):
            f.Text = '{}'.format(old_word[w]) # 旧内容重点提问
    
            # 替换框参数
            f.Replacement.ClearFormatting() # 清除原有格式
            # f.Replacement.Text = '^&' # 替换框内容
            f.Replacement.Text = '{}'.format(new_word[w]) # 替换框内容
            f.Replacement.Font.Bold = True # 替换文本设置为加粗
            f.Execute(Replace=constants.wdReplaceAll) # 执行,查找全部
        i += 1
    
    aDoc.SaveAs() # 保存并关闭文件,根据需要设置
    time.sleep(3)
    aDoc.Close() # 保存并关闭文件,根据需要设置
    time.sleep(1)
    print(f'完成,共替换了{i}个表格')


感言:

花了五周时间,终于将周计划(教案)的代码全部打通了,能够快速批量修改周计划、教案的结构框架样例,(* ̄︶ ̄)。

在框架搭好基础上,后续需要花时间在“word”内改内容,撑满格子,就能将周计划、教案变得更完善。

20240328微调

由于教案名称长度不同,因此后面空几个个字不能确定,说手动调整空格后,再次生成时,为了确保执教老师和活动名称跟在同一行上,需要在提取活动名称时,将空格也写入题目

重点是:

不要str.rstrip() (它的意思是:删除字符最后的空格) 


'''
加粗测试里的19份docx内容写入 修改补充版.xlsx  生成新学期周计划19个docx,放在“修改补充版”文件夹里,再加粗文字,放到“加粗测试”里
教案题目后面的空格默认添加好
作者:AI对话大师  VBA守候 阿夏
时间:20240328
'''
from docx import Document

import os,time

from openpyxl import load_workbook
import glob
import re
import xlrd

pathall=[]
path =r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\06加粗测试'

 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

# 新建EXCEL
import xlwt 
f = xlwt.Workbook('encoding = utf-8')#设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True)#创建sheet工作表

# 写入标题

titleall=['grade', 'classnum', 'weekhan', 'datelong', 'day1', 'day2', 'day3', 'day4', 'day5', 'life', 'life1', 'life2',\
     'sportcon1', 'sportcon2', 'sportcon3', 'sportcon4', 'sportcon5', 'sport1', 'sport2', 'sport3', 'sport4', 'sport5',\
         'sportzd1', 'sportzd2', 'sportzd3', 'game1', 'game2', 'game3', 'game4', 'game5', 'gamezd1', 'gamezd2', \
            'theme', 'theme1', 'theme2', 'gbstudy', 'art', 'gbstudy1', 'gbstudy2', 'gbstudy3', 'jtstudy1', 'jtstudy2', 'jtstudy3', 'jtstudy4', 'jtstudy5', \
                'gy1', 'gy2', 'fk1', 'pj11', 'fk1nr', 'fk1tz', 'fk2', 'pj21', 'fk2nr', 'fk2tz', 'dateshort', 'weekshu', \
                    'title1', 'topic11', 'topic12', 'jy1', 'cl1', 'j1gc', \
                        'title2', 'topic21', 'topic22', 'jy2', 'cl2', 'j2gc', \
                            'title3', 'topic31', 'topic32', 'jy3', 'cl3', 'j3gc', \
                                'title4', 'topic41', 'topic42',  'jy4','cl4', 'j4gc',\
                                     'title5', 'topic51', 'topic52', 'jy5', 'cl5', 'j5gc',\
                                         'fs1', 'fs11', 'fs2', 'fs21','T1','T2','T3','T4','T5']
for l9 in range(len(titleall)):
    sheet1.write(0,l9,titleall[l9])

n=1

for h in range(len(pathall)):    # 19份19行
    LIST=[]
    path=pathall[h]

    doc = Document(path)
    
    # 获取第一行段落文字
    bt=doc.paragraphs[0].text
    
    # print(bt)
    # 中(5)班  第三周  活动安排
    LIST.append(bt[0])    # 添加年级
    LIST.append(bt[2])    # 添加班号
    if len(bt)==16:
        LIST.append(bt[8:9])    # 添加周次 大写 如果长度等于15 就是一位数汉字
    else:
        LIST.append(bt[8:10])

    # 获取第一行段落文字
    rq1=doc.paragraphs[1].text
    LIST.append(rq1[3:])    # 添加起止日期 
# print(LIST)

# ll=['grade','classnum','weekhan','datelong'.]



    # 获取所有表格对象
    tables = doc.tables
    # 获取word中第一个表格(周计划表)
    table = tables[0]


#     # print('-----提取第1张表格(周计划表)里面的内容----------')
    # 星期X
    for xq in range(3,8):
        xq1 = table.cell(0,xq).text        # K.append(k)        
        LIST.append(xq1)

    # 提取阿拉伯数字的周    
    # LIST.append(h+1)

#     
    # 生活名称
    l = table.cell(1,3).text
    # print(l)
    # 吃点心
    LIST.append(l)

    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,3).text.split('\n')
    # print(ll)
#    ['1.观察值日生在自主午餐环节中帮助阿姨分碗筷、毛巾的情况。', '2.提醒幼儿在自主午餐的过程中不说话,打喷嚏咳嗽要对外。']
    # 不要“1、”、“2、”
    L=[]
    for lll in range(2):    # 一共2条
        L.append(ll[lll][2:])      #    # 不要“1、”、“2、”
        LIST.append(ll[lll][2:])   
    # print(L)
    
#     # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 导入,做参考,需要调整
     # 集体游戏 
    for jt in range(3,8):
        jt1 = table.cell(3,jt).text        # K.append(k)        
        LIST.append(jt1)
    
     # 集体游戏 
    for jt2 in range(3,8):
        jt3 = table.cell(4,jt2).text        # K.append(k)        
        LIST.append(jt3)


    # 运动观察与指导(导入做参考,实际是自己写)
    s=table.cell(5,4).text.split('\n')
    # print(s)
#     # [1.'观察幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '2.观察幼儿是否能寻找皮球的多种玩法。', '3.提醒幼儿注意打曲棍干的安全。']
#     # 有些序号是自动编号,不占字数。
    S=[]
    for sss in range(3):    # 一共3条
        S.append(s[sss][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(s[sss][2:])
    # print(S)
#     # ['幼儿是否能双手握住曲棍杆将皮球打出一定距离。', '幼儿是否能寻找皮球的多种玩法。', '提醒幼儿注意打曲棍干的安全。']

    # 游戏内容 角色游戏 导入做参考,每年都在更换 
    for fj in range(3,8):
        fj2 = table.cell(7,fj).text                
        LIST.append(fj2)

    # 游戏观察与指导(导入做参考,实际是自己写)
    g=table.cell(8,4).text.split('\n')
    # print(g)
    # ['1、观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '2、重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '3、观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']
    # 有些序号是自动编号,不占字数。
    G=[]
    for ggg in range(2):    # 一共3条
        G.append(g[ggg][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(g[ggg][2:]) 
    # print(G)
#     # ['观察娃娃家的幼儿是否会照顾娃娃,与娃娃互动。', '重点观察医生在小医院游戏中,与病人的互动时能否加上一些肢体动作。', '观察幼儿角色游戏结束后,能否帮助其他伙伴一同整理材料。']

    # 主题和主题说明
    ti=table.cell(9,4).text.split('\n')
#     print(ti)

    # ['春天来了', '1、了解春天是个万物生长的季节,关注自然环境的不断变化。', '2、感受大自然美丽的景像,以各种方式表达自己的情感与体验。']
    # 有些序号是自动编号,不占字数。
    T=[]# 第1个春天来了,不需要删除序号,直接添加
    T.append(ti[0])
    LIST.append(ti[0])
    for ttt in range(1,3):    # 一共2条主题说明
        T.append(ti[ttt][2:])         # 不要“1、”、“2、”、
        LIST.append(ti[ttt][2:])
    # print(T)
    # ['春天来了', '了解春天是个万物生长的季节,关注自然环境的不断变化。', '感受大自然美丽的景像,以各种方式表达自己的情感与体验。']

    # 个别化内容(3-5项) 一行多个,全部写入
    iiii=table.cell(10,4).text.split('\n')
    # print(iiii)     
    LIST.append(iiii)
    #  ['电风扇转起来了、漂亮的帽子、绿太阳、大雨小雨、做柳树等']

    # 美术专用活动室
    ii8=table.cell(11,4).text.split('\n')
    # print(iiii)     
    LIST.append(ii8)
    

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(12,4).text.split('\n')
    # print(ii)  
    # # ['1.观察幼儿组装各种小电风扇的情况,鼓励幼儿不断进行尝试。', '2.观察幼儿制作帽子的情况,提示幼儿尝试不同的材料进行装饰。', '3.观察幼儿在活动过程中的专注程度,鼓励幼儿专心做自己的事。'] 
    # # # 有些序号是自动编号,不占字数。
    I=[]
    for iii1 in range(3):    # 一共3条
        I.append(ii[iii1][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(ii[iii1][2:])
    # print(I)
    # # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']
   
    
    # 集体学习 横向五个格子
    K =[]
    for e in range(3,8):
        k = table.cell(13,e).text
        K.append(k)        
        LIST.append(k)
    # print(K)
    # # ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']

    
    # 家园共育(导入做参考,实际是自己写)    
    yy=table.cell(14,4).text.split('\n')
    # print(yy)
    # ['1、为春游活动做准备。', '2、在家长的帮助下学习折一些纸花。', '3、天气转暖,适当地为孩子减少衣服。']
    # 有些序号是自动编号,不占字数。删除2字符后,可能会少前面几个字
    Y=[]
    for yyy in range(2):    # 一共3条
        Y.append(yy[yyy][2:])         # 不要“1、”、“2、”、“3、”
        LIST.append(yy[yyy][2:])
    # print(Y)
    # ['为春游活动做准备。', '在家长的帮助下学习折一些纸花。', '天气转暖,适当地为孩子减少衣服。']
    

    # # 反馈与调整(变化很大)不导入
    ff=table.cell(1,8).text.split('\n')
    # print(ff)
    # print(h+1,len(ff))
    # # 8行
    
    
    for j in range(2):
        # 提取活动1
        LIST.append(ff[j*4][0:4])    
        # # 提取身份1
        LIST.append(ff[j*4][10:-1])
        # 提取反思1
        LIST.append(ff[j*4+1])
        # print(LIST)
    #     # # 提取调整1
        LIST.append(ff[j*4+3])
    # print(LIST)

    
    print('-----提取第2-5张表格(教案)里面的内容----------')
    

    # 获取第5行段落文字
    bt2=doc.paragraphs[5].text
    
    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('期')
    end_index = bt2.find('第')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date1 = bt2[start_index + 1: end_index].strip()
            print(date1)

    LIST.append(date1)    # 添加短日期

    # 找到“期”和“第”的位置  短日期
    start_index = bt2.find('(')
    end_index = bt2.find(')')
    
    # 提取“期”到“第”之间的文字并去掉空格
    if start_index != -1 and end_index != -1:
        if start_index < end_index:
            date2 = bt2[start_index + 1: end_index].strip()
            print(date2)



    LIST.append(date2)    # 添加添加周次
   
 

    for a in range(1,3): # 先提取2张表(  共有3张表,其中第1、2张表提取00和01,第3表提取00)  
        for b in range(2):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 

            # 有两张表
            all=table.cell(0,b).text.split('\n')
            print(len(all))
            # 看看表格里面的行数,如果等于1行(元宵节放假),就写6个空格
            if len(all)==1:
                for tt in range(6):
                    LIST.append('')
             # 看看表格里面的行数,如果大于1行,就不断写入内容
            else:
                # print(all)
                # 提取活动名称(删除后面的执教人员)

                fs1 = all[0]
                start_index = fs1.index(":")+1 
                end_index = fs1.index("执")
                title = fs1[start_index:end_index]                
                # title1 = title.replace(" ", "")
                LIST.append(title)                
                
                # print(title)
                # 空中小屋等4个题目

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for to in range(2,4):    # 行数
                    mb=all[to][2:]
                    LIST.append(mb)

                    # topic.append(all[to][2:])
                    
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # ppt、故事录音

                # 提取活动过程
                pro=all[8:]
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    for a in range(3,4): # 最后提取第3张表的00部分
        for b in range(1):        # 表1有两个格子00 01 表2有两个格子00 01
            
            table = tables[a]        # 表1 表2 
            # 有两张表
            all=table.cell(0,b).text.split('\n')
            if len(all)==1:
                LIST.append('')

            # print(all)
            else:
                # 提取活动名称(删除后面的执教人员)

                fs1 = all[0]
                start_index = fs1.index(":")+1 
                end_index = fs1.index("执")
                title = fs1[start_index:end_index]                
                # title1 = title.replace(" ", "")
                LIST.append(title)     

                               
                # print(title)
                # 空中小屋 只有一个标题

                # 提取活动目标(2行)删除前面的序号
                topic=[]
                for t in range(2,4):    # 行数
                    topic.append(all[t][2:])
                    LIST.append(all[t][2:])
                # print(topic)
                # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

                # 提取活动准备
                # (第一种:经验准备)
                pre1=all[5][7:]
                LIST.append(pre1)
                # print(pre)
                # (第二种:材料准备)
                pre2=all[6][7:]
                LIST.append(pre2)
                # print(pre2)

                # 提取活动过程
                pro=all[8:]
                # print(pro)
                # # 这是列表样式
                # ['一、我家住几楼---导入主题,激起幼儿兴趣', '1、你们的家住在哪里?住在几楼?为什么买这么高?', '小结:是呀,住这么高的房子可以看到远远的风景。', '2、小狐狸也想住楼房,楼上的房间高高的,远远望去 
                # ,可以看见一片美景,那该多开心。', '二、房
                # 合并列表
                PRO='\n'.join(pro)
                # print(PRO)
                LIST.append(PRO)
                # 一、我家住几楼---导入主题,激起幼儿兴趣
                # 1、你们的家住在哪里?住在几楼?为什么买这么高?
                # 小结:是呀,住这么高的房子可以看到远远的风景。
                # 2、小狐狸也想住楼房,楼上的房间高高的,远远望去,可以看见一片美景,那该多开心。
                # 二、房子造在哪?---分段欣赏

    
        for c in range(2):        # 表3的01有两个上下格子  表2有两个格子00 01
            table = tables[3]        # 表3
            
            # 有两张表
            fs=table.cell(c,1).text.split('\n')
            # print(fs)
            # 提取反思的课程名字
            # 提取活动名称(删除后面的执教人员)

            fs2 = fs[1]
            start_index = fs2.index(":")+1 
            end_index = fs2.index("执")
            fstitle = fs2[start_index:end_index]                
            # title1 = title.replace(" ", "")
            # fstitle=fs[1][5:][:-6]
            # print(fstitle)
            LIST.append(fstitle)
        
            # 纯反思部分(第三行开始) ,提取整段包括前面的4个空格   
            fs1=fs[2:]
            # print(fs1)
            fs3=[]
            for i in range(len(fs1)):
                fs4=fs1[i]        # 主动添加缩进2字符,包含4个空格
                # print(fs4)
                fs3.append(fs4)

            # 合并列表
            fs2='\n'.join(fs3)
            # print(fs2)
            LIST.append(fs2)

        # T1-T5

    extracted_texts = []

    # 遍历前5张表格
    for table in doc.tables[:5]:
        # 获取第1行单元格内容
        first_row_cells = table.rows[0].cells

        # 提取“执教:”和回车符之间的文字并去除空格
        for cell in first_row_cells:
            cell_text = cell.text.strip()
            if '执教:' in cell_text:
                start_index = cell_text.find('执教:') + len('执教:')
                end_index = cell_text.find('\n')
                extracted_text = cell_text[start_index:end_index].strip()
                extracted_texts.append(extracted_text)

    # 打印提取的文字
    for T in extracted_texts:
        print(T)    
        LIST.append(T)
        

        


        

# print(LIST)   
   
    for g in range(len(LIST)):
        # K =[1,3,4,6,8,10]#要写入的列表的值
        sheet1.write(n,g,LIST[g])#写入数据参数对应 行,列,值


        

    n+=1
f.save(r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划\09 原计划提取的内容(修改补充版).xls')#保存.x1s到当前工作目录







time.sleep(2)

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os



# path=r'D:\\test\\02办公类\\90周计划4份\\01 信息窗'+'\\'
path = r"D:\test\02办公类\91周计划4份_2024年中4班\04 周计划"
print(path)

file_path=path+r'\04合成新周计划(修改补充版)'
print(file_path)


# 二、遍历excel,逐个生成word(WeeklyPlan.docx.docx是前面的模板)
try:
    os.mkdir(file_path)
except:
    pass

# tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(修改补充版).xls')
# WeeklyPlan = pd.read_excel(path+r'\09 原计划提取的内容(仅导出部分).xls')


grade = WeeklyPlan["grade"].str.rstrip()
classnum =WeeklyPlan["classnum"] # 没有str.rstrip()是数字格式
weekhan =WeeklyPlan["weekhan"].str.rstrip() # str.rstrip()都是文字格式
# day=WeeklyPlan["day"].str.rstrip() 
# sc =WeeklyPlan["sc"].str.rstrip() 
datelong =WeeklyPlan["datelong"].str.rstrip() 

day1 = WeeklyPlan["day1"].str.rstrip() 
day2 = WeeklyPlan["day3"].str.rstrip() 
day3 = WeeklyPlan["day3"].str.rstrip() 
day4 = WeeklyPlan["day4"].str.rstrip() 
day5 = WeeklyPlan["day5"].str.rstrip() 

life = WeeklyPlan["life"].str.rstrip() 
life1 = WeeklyPlan["life1"].str.rstrip() 
life2 = WeeklyPlan["life2"].str.rstrip()
sportcon1 = WeeklyPlan["sportcon1"].str.rstrip() 
sportcon2 = WeeklyPlan["sportcon2"].str.rstrip()
sportcon3 = WeeklyPlan["sportcon3"].str.rstrip() 
sportcon4 = WeeklyPlan["sportcon4"].str.rstrip()
sportcon5 = WeeklyPlan["sportcon5"].str.rstrip() 

sport1 = WeeklyPlan["sport1"].str.rstrip() 
sport2 = WeeklyPlan["sport2"].str.rstrip() 
sport3 = WeeklyPlan["sport3"].str.rstrip() 
sport4 = WeeklyPlan["sport4"].str.rstrip() 
sport5 = WeeklyPlan["sport5"].str.rstrip() 
sportzd1 = WeeklyPlan["sportzd1"].str.rstrip() 
sportzd2 = WeeklyPlan["sportzd2"].str.rstrip()
sportzd3 = WeeklyPlan["sportzd3"].str.rstrip()
game1 = WeeklyPlan["game1"].str.rstrip() 
game2 = WeeklyPlan["game2"].str.rstrip() 
game3 = WeeklyPlan["game3"].str.rstrip() 
game4 = WeeklyPlan["game4"].str.rstrip() 
game5 = WeeklyPlan["game5"].str.rstrip() 
gamezd1 = WeeklyPlan["gamezd1"].str.rstrip() 
gamezd2 = WeeklyPlan["gamezd2"].str.rstrip() 
theme= WeeklyPlan["theme"].str.rstrip() 
theme1= WeeklyPlan["theme1"].str.rstrip() 
theme2= WeeklyPlan["theme2"].str.rstrip() 
gbstudy = WeeklyPlan["gbstudy"].str.rstrip()
art = WeeklyPlan["art"].str.rstrip()
gbstudy1 = WeeklyPlan["gbstudy1"].str.rstrip() 
gbstudy2 = WeeklyPlan["gbstudy2"].str.rstrip() 
gbstudy3 = WeeklyPlan["gbstudy3"].str.rstrip() 
jtstudy1 = WeeklyPlan["jtstudy1"].str.rstrip() 
jtstudy2 = WeeklyPlan["jtstudy2"].str.rstrip() 
jtstudy3 = WeeklyPlan["jtstudy3"].str.rstrip() 
jtstudy4 = WeeklyPlan["jtstudy4"].str.rstrip() 
jtstudy5 = WeeklyPlan["jtstudy5"].str.rstrip() 
gy1 = WeeklyPlan["gy1"].str.rstrip()
gy2 = WeeklyPlan["gy2"].str.rstrip()
fk1	= WeeklyPlan["fk1"].str.rstrip()
pj11 = WeeklyPlan["pj11"].str.rstrip()
fk1nr = WeeklyPlan["fk1nr"].str.rstrip()
fk1tz = WeeklyPlan["fk1tz"].str.rstrip()
fk2 = WeeklyPlan["fk2"].str.rstrip()
pj21= WeeklyPlan["pj21"].str.rstrip()
fk2nr = WeeklyPlan["fk2nr"].str.rstrip()
fk2tz = WeeklyPlan["fk2tz"].str.rstrip()

dateshort=WeeklyPlan["dateshort"].str.rstrip() 
weekshu=WeeklyPlan["weekshu"]# 没有str.rstrip()是数字格式

title1 = WeeklyPlan["title1"]# 题目后面有空格,不需要清除
topic11 = WeeklyPlan["topic11"].str.rstrip()
topic12 = WeeklyPlan["topic12"].str.rstrip()
jy1 = WeeklyPlan["jy1"].str.rstrip()
cl1 = WeeklyPlan["cl1"].str.rstrip()
j1gc= WeeklyPlan["j1gc"].str.rstrip()

title2 = WeeklyPlan["title2"]# 题目后面有空格,不需要清除
topic21 = WeeklyPlan["topic21"].str.rstrip()
topic22 = WeeklyPlan["topic22"].str.rstrip()
jy2 = WeeklyPlan["jy2"].str.rstrip()
cl2 = WeeklyPlan["cl2"].str.rstrip()
j2gc= WeeklyPlan["j2gc"].str.rstrip()

title3 = WeeklyPlan["title3"]# 题目后面有空格,不需要清除
topic31 = WeeklyPlan["topic31"].str.rstrip()
topic32 = WeeklyPlan["topic32"].str.rstrip()
jy3 = WeeklyPlan["jy3"].str.rstrip()
cl3 = WeeklyPlan["cl3"].str.rstrip()
j3gc= WeeklyPlan["j3gc"].str.rstrip()

title4 = WeeklyPlan["title4"]# 题目后面有空格,不需要清除
topic41 = WeeklyPlan["topic41"].str.rstrip()
topic42 = WeeklyPlan["topic42"].str.rstrip()
jy4 = WeeklyPlan["jy4"].str.rstrip()
cl4 = WeeklyPlan["cl4"].str.rstrip()
j4gc= WeeklyPlan["j4gc"].str.rstrip()

title5 = WeeklyPlan["title5"]# 题目后面有空格,不需要清除
topic51 = WeeklyPlan["topic51"].str.rstrip()
topic52 = WeeklyPlan["topic52"].str.rstrip()
jy5 = WeeklyPlan["jy5"].str.rstrip()
cl5 = WeeklyPlan["cl5"].str.rstrip()
j5gc= WeeklyPlan["j5gc"].str.rstrip()

fs1 = WeeklyPlan["fs1"]# 题目后面有空格,不需要清除()str
fs11= WeeklyPlan["fs11"].str.rstrip()
fs2= WeeklyPlan["fs2"]# 题目后面有空格,不需要清除
fs21= WeeklyPlan["fs21"].str.rstrip()

T1 = WeeklyPlan["T1"].str.rstrip() 
T2 = WeeklyPlan["T2"].str.rstrip()
T3 = WeeklyPlan["T3"].str.rstrip() 
T4 = WeeklyPlan["T4"].str.rstrip()
T5 = WeeklyPlan["T5"].str.rstrip()

# 遍历excel行,逐个生成
num = WeeklyPlan.shape[0]
print(num)
for i in range(num):
    context = {
        "grade": grade[i],
        "classnum": classnum[i],
        "weekhan": weekhan[i],
        # "day": day[i],
        # "sc": sc[i],
        "datelong": datelong[i],
        
        "day1": day1[i],
        "day2": day2[i],
        "day3": day3[i], 
        "day4": day4[i],
        "day5": day5[i],
        
        "life": life[i],
        "life1": life1[i],
        "life2": life2[i],
        "sportcon1": sportcon1[i],
        "sportcon2": sportcon2[i],
        "sportcon3": sportcon3[i],
        "sportcon4": sportcon4[i],
        "sportcon5": sportcon5[i],
        "weekshu": weekshu[i], 
        "sport1": sport1[i],
        "sport2": sport2[i],
        "sport3": sport3[i], 
        "sport4": sport4[i],
        "sport5": sport5[i],
        "sportzd1": sportzd1[i],  
        "sportzd2": sportzd2[i],
        "sportzd3": sportzd3[i],  
        "game1": game1[i],
        "game2": game2[i],
        "game3": game3[i], 
        "game4": game4[i],
        "game5": game5[i],
        "gamezd1": gamezd1[i],
        "gamezd2": gamezd2[i],
        "theme": theme[i],
        "theme1": theme1[i],
        "theme2": theme2[i],
        "gbstudy": gbstudy[i],
        "art": art[i],
        "gbstudy1": gbstudy1[i], 
        "gbstudy2": gbstudy2[i], 
        "gbstudy3": gbstudy3[i], 
        "jtstudy1": jtstudy1[i],
        "jtstudy2": jtstudy2[i],
        "jtstudy3": jtstudy3[i],  
        "jtstudy4": jtstudy4[i],
        "jtstudy5": jtstudy5[i],  
        "gy1": gy1[i],
        "gy2": gy2[i],
        "fk1": fk1[i],
        "pj11": pj11[i], 
        "fk1nr": fk1nr[i],
        "fk1tz": fk1tz[i],
        "fk2": fk2[i],
        "pj21": pj21[i],
        "fk2nr": fk2nr[i],
        "fk2tz":fk2tz[i], 

        "dateshort": dateshort[i],
        "weekshu": weekshu[i], 

        "title1":title1[i],   
        "topic11":topic11[i],   
        "topic12":topic12[i],   
        "jy1":jy1[i],   
        "cl1":cl1[i],
        "j1gc": j1gc[i],
        "title2":title2[i],   
        "topic21":topic21[i],   
        "topic22":topic22[i],   
        "jy2":jy2[i],   
        "cl2":cl2[i],   
        "j2gc": j2gc[i],
        "title3":title3[i],   
        "topic31":topic31[i],   
        "topic32":topic32[i],   
        "jy3":jy3[i],   
        "cl3":cl3[i],   
        "j3gc": j3gc[i],
        "title4":title4[i],   
        "topic41":topic41[i],   
        "topic42":topic42[i],   
        "jy4":jy4[i],   
        "cl4":cl4[i] ,  
        "j4gc": j4gc[i],
        "title5":title5[i],   
        "topic51":topic51[i],   
        "topic52":topic52[i],   
        "jy5":jy5[i],   
        "cl5":cl5[i]  ,
        "j5gc": j5gc[i],
        "fs1": fs1[i],
        "fs11": fs11[i],
        "fs2": fs2[i],
        "fs21": fs21[i]	,

       
        "T1": T1[i],  
        "T2": T2[i],	
        "T3": T3[i],  
        "T4": T4[i],
        "T5": T5[i],  																
    
    }
    tpl = DocxTemplate(path+r'\12 周计划_横版.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{} 第{}周 周计划 {}({})({}{}班下学期).docx".format('%02d'%weekshu[i],str(weekhan[i]),theme[i],datelong[i],grade[i],classnum[i]))

time.sleep(2)



'''
docx教案的表格里的“重点提问”“过渡语”“小结”加粗
(使用【办公类-22-05】周计划系列(5)-Word关键词加粗(把所有“小结”“提问”的文字设置 的代码)
作者:VBA-守候、阿夏补充
时间:2024年3月14日
'''
import os,time
from docx import Document
from docx.enum.text import WD_BREAK
from docx.oxml.ns import nsdecls

from docx.oxml import OxmlElement
from docx.oxml.ns import qn

# 文件夹路
path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'



from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
 
old_word=['提问','小结','重点重点','过渡语']
new_word=['重点提问','小结','重点','过渡语']

print('-----第1步:把《04合成新周计划》里的资料复制到《06加粗测试)》-----')
#coding=utf-8
import os
import shutil

# old_path = path+r'\04合成新周计划'  # 要复制的文件所在目录
old_path = path+r'\04合成新周计划(修改补充版)'  # 要复制的文件所在目录

new_path = path+r'\06加粗测试'  #新路径

def FindFile(path):
    for ipath in os.listdir(path):
        fulldir = os.path.join(path, ipath)  # 拼接成绝对路径
        print(fulldir)         #打印相关后缀的文件路径及名称
        if os.path.isfile(fulldir):  # 文件,匹配->打印
            shutil.copy(fulldir,new_path)
        if os.path.isdir(fulldir):  # 目录,递归   
            FindFile(fulldir)

FindFile(old_path)

print('-----第2步:提取word路径-----')

from docx import Document
import os

pathall=[]
path =new_path 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19

print('------第3步:每一份word替换----')

#————————————————
# 版权声明:本文为CSDN博主「VBA-守候」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# 原文链接:https://blog.csdn.net/qq_64613735/article/details/125552847
# 部分参数修改

for h in range(len(pathall)):    # 20份
    path=pathall[h]   
    
    
    wdApp = EnsureDispatch("Word.Application")
    # aDoc = wdApp.ActiveDocument # aDoc为当前文件
    # wdApp.Visible = False # 程序设置为不可见
    aDoc = wdApp.Documents.Open(path) # 打开已经存在的文件
    
    i = 0 
    # 文档里有多个几个表格
    for ta in aDoc.Tables: # 遍历表格,如果无需遍历,直接将ta指定为某个表格即可,如这样指定为第一个表格:ta = aDoc.Tables(1)
        # f为每个表格区域查找
        f = ta.Range.Find
    
        # 查找框参数
        f.ClearFormatting() # 清除原有格式
        f.Forward = True # 向前查找
        f.Format = True # 查找格式
        f.Wrap = constants.wdFindStop # 查找完成即停止
        f.MatchWildcards = True # 使用通配符,根据需要设置
        # f.Text = '[!^13^l::]{1,}[::]' # 查找的内容  冒号前面的 [!^13^l::]    1代表z只要替换一次,[::]代表冒号。冒号前面包括冒号需要改成加粗
        # f.Text = '[{}]{2,}'.format(old_word) # 查找的内容  2代表2个字小结,如果1 ,就会吧“小”开头的字全部替换为小结加粗,,提问会变成两次重点提问.但是这种写法无法用format,
        for w in range(len(old_word)):
            f.Text = '{}'.format(old_word[w]) # 旧内容重点提问
    
            # 替换框参数
            f.Replacement.ClearFormatting() # 清除原有格式
            # f.Replacement.Text = '^&' # 替换框内容
            f.Replacement.Text = '{}'.format(new_word[w]) # 替换框内容
            f.Replacement.Font.Bold = True # 替换文本设置为加粗
            f.Execute(Replace=constants.wdReplaceAll) # 执行,查找全部
        i += 1
    
    aDoc.SaveAs() # 保存并关闭文件,根据需要设置
    time.sleep(3)
    aDoc.Close() # 保存并关闭文件,根据需要设置
    time.sleep(1)
    print(f'完成,共替换了{i}个表格')


这个代码生成的教案标题和执教会在同一行上,中间的空格数量不确定,

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值