【办公类-22-04】周计划系列(4)-生成“周计划”(提取旧docx指定段落的内容,写入EXCLE模板,再次生成新docx)

news2024/11/24 15:22:01

代码相当复杂,操作很繁琐,自己都要研究半天T_T

文件夹展示

01提取提取新表的已有内容(提取大8班、大7班的新版本里面的额内容)

(需要里面的一些反思,用来占位)

这里有一份根据新模板用Python批量做过的“完整”的教案集合

 

 一些内容可以被继续套用(手写修改的,提取出来做公共素材)

 

from docx import Document

import os

pathall=[]
path =r'D:\2022.9大七班上下学期资料\202106 大八班级资料(程 阿夏)\03 202202大八班下学期资料\01周计划 信息窗\01 新周计划\大八周计划的批量(等待修改)'
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工作表

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

    doc = Document(path)

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


    print('-----提取第1张表格(周计划表)里面的内容----------')

    list=[]
    # 生活名称
    l = table.cell(1,4).text
    print(l)
    # 吃点心
    list.append(l)
    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,4).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)
    # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 不导入,每年都在更换

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

    # 游戏内容 不导入,每年都在更换
    # 游戏观察与指导(导入做参考,实际是自己写)
    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)
    # ['三只蝴蝶、找蝴蝶、柳树姑娘的头发、春雨沙沙等']

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(12,4).text.split('\n')
    print(ii)
    # ['1、观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '2、观察幼儿是否能看懂图谱,跟着音乐打节奏。']
    # 有些序号是自动编号,不占字数。
    I=[]
    for iii in range(3):    # 一共3条
        I.append(ii[iii][2:])         # 不要“1、”、“2、”、“3、”
        list.append(ii[iii][2:])
    print(I)
    # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']

    # 集体学习 横向五个格子
    K =[]
    for e in range(4,9):
        k = table.cell(12,e).text
        K.append(k)        
        list.append(k)
    print(K)
    # ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']


    # 家园共育(导入做参考,实际是自己写)    
    yy=table.cell(13,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)
    for j in range(2):
        # 提取活动1
        list.append(ff[j*4][0:2])    
        # 提取身份1
        list.append(ff[j*4][10:-1])
        print(list)
        # 提取反思1
        list.append(ff[j*4+1])
        print(list)
        # 提取调整1
        list.append(ff[j*4+3])
    # print(list)

    # ['1、观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '2、观察幼儿是否能看懂图谱,跟着音乐打节奏。']
    # 有些序号是自动编号,不占字数。
    I=[]
    for iii in range(3):    # 一共3条
        I.append(ii[iii][2:])         # 不要“1、”、“2、”、“3、”
        list.append(ii[iii][2:])
    print(I)

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

            # 提取活动名称(删除后面的执教人员)
            title=all[0][5:][:-6]
            list.append(title)
            print(title)
            # 空中小屋

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

            # 提取活动准备(第二种准备,第一种准备需要自己写)
            pre=all[4][5:]
            list.append(pre)
            print(pre)
            # ppt、故事录音

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

            # 提取活动名称(删除后面的执教人员)
            title=all[0][5:][:-6]
            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)
            # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

            # 提取活动准备(第二种准备,第一种准备需要自己写)
            pre=all[4][5:]
            list.append(pre)
            print(pre)
            # ppt、故事录音

            # 提取活动过程
            pro=all[6:]
            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][4:][:-6]
        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)


        

    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办公类\90周计划4份\04 周计划\大8旧版周计划提取信息.xls')#保存.x1s到当前工作目录


doc.save(path)


               

二、提取旧模板(doc旧模板,内容要补充)

过去做的都是大班一套上下学期,这次我是中班,就要重新找中班以前的教案集合进行修改

(以前的教案基本都是doc格式、而且周数是一位数)

 旧样式

 新样式

 (新模板框架变化不大,但是里面填写内容很细碎、人工书写一定有很多的遗漏,用Python批量做可以批量统一处理这些细节——如字体、段落、居中、缩进等等。大大减少遗漏率

from docx import Document

import os

pathall=[]
path =r'D:\test\02办公类\90周计划4份\04 周计划\01周计划备课(已改+随机调整)'
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工作表

n=1
for t in range(len(pathall)):    # 19份19行
    path=pathall[t]

    doc = Document(path)

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


    print('-----提取第1张表格(周计划表)里面的内容----------')

    list=[]
    # 生活名称
    l = table.cell(1,4).text
    print(l)
    # 吃点心
    list.append(l)
    # 生活说明(1格2行,分开) (导入做参考,实际是自己写)
    ll=table.cell(2,4).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)
    # ['观察幼儿在吃点心时是否能熟练地使用夹子夹取饼干。', '提醒个别幼儿喝完牛奶擦嘴巴。']

    # 运动=集体游戏+分散游戏 不导入,每年都在更换

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

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

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

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

    # 个别化内容(3-5项) 一行多个,全部写入
    iiii=table.cell(10,4).text.split('\n')
    print(iiii)
    list.append(iiii)
    # ['三只蝴蝶、找蝴蝶、柳树姑娘的头发、春雨沙沙等']

    # 个别化观察与指导(导入做参考,实际是自己写)
    ii=table.cell(11,4).text.split('\n')
    print(ii)
    # ['1、观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '2、观察幼儿是否能看懂图谱,跟着音乐打节奏。']
    # 有些序号是自动编号,不占字数。
    I=[]
    for iii in range(2):    # 一共3条
        I.append(ii[iii][2:])         # 不要“1、”、“2、”、“3、”
        list.append(ii[iii][2:])
    print(I)
    # ['观察幼儿是否能通过协商分配角色表演故事《三只蝴蝶》。', '观察幼儿是否能看懂图谱,跟着音乐打节奏。']

    # 集体学习 横向五个格子
    K =[]
    for e in range(4,9):
        k = table.cell(12,e).text
        K.append(k)        
        list.append(k)
    print(K)
    ['空中小屋\n(偏语言领域)', '花园里有什么\n(偏科学领域-探究)', '*猴子看猴子做\n(偏艺术领域-音乐)', '*借形想象\n(偏艺术领域-美术)', 'PATHS课程--赞美1(偏社会领域)']

    # 家园共育(导入做参考,实际是自己写)
    # 个别化观察与指导(导入做参考,实际是自己写)
    yy=table.cell(13,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)
    # ['为春游活动做准备。', '在家长的帮助下学习折一些纸花。', '天气转暖,适当地为孩子减少衣服。']

    # 反馈与调整(变化很大)不导入
    print('-----提取第2-5张表格(教案)里面的内容----------')
    # 第1周、第20周,或国庆周会出现格子表格不满的情况,需要手动调整
    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(all)

            # 提取活动名称(删除后面的执教人员)
            title=all[0][5:][:-6]
            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)
            # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

            # 提取活动准备(第二种准备,第一种准备需要自己写)
            pre=all[4][5:]
            list.append(pre)
            print(pre)
            # ppt、故事录音

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

            # 提取活动名称(删除后面的执教人员)
            title=all[0][5:][:-6]
            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)
            # ['理解故事,知道春天是竹笋快速生长的季节。', '乐意想办法帮助小狐狸解决问题,并能大胆表达自己的想法。']

            # 提取活动准备(第二种准备,第一种准备需要自己写)
            pre=all[4][5:]
            list.append(pre)
            print(pre)
            # ppt、故事录音

            # 提取活动过程
            pro=all[6:]
            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][4:][:-6]
        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)


        

    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办公类\90周计划4份\04 周计划\旧版周计划提取信息.xls')#保存.x1s到当前工作目录


doc.save(path)


               

三、生成本学期本班用周计划20份

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
zpath=os.getcwd()+'\\'
zpath=r'D:\test\02办公类\90周计划4份\04 周计划'+'\\'
# zpath=r'D:\test\05批量改名字程序\00周计划批量'+'\\'

# 生成的新周计划所在文件夹
file_path=zpath+r'\03 新周计划生成(原版)'


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

tpl = DocxTemplate(zpath+'05 WeeklyPlan.docx')
WeeklyPlan = pd.read_excel(zpath+'06 WeeklyPlan.xlsx')
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() 
dateshort=WeeklyPlan["dateshort"].str.rstrip() 
weekshu=WeeklyPlan["weekshu"]# 没有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() 
T1 = WeeklyPlan["T1"].str.rstrip() 
T2 = WeeklyPlan["T2"].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()

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

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

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

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

title5 = WeeklyPlan["title5"].str.rstrip()
topic51 = WeeklyPlan["topic51"].str.rstrip()
topic52 = WeeklyPlan["topic52"].str.rstrip()
pre5 = WeeklyPlan["pre5"].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()

# 遍历excel行,逐个生成
num = WeeklyPlan.shape[0]
for i in range(num):
    context = {
        "grade": grade[i],
        "classnum": classnum[i],
        "weekhan": weekhan[i],
        # "day": day[i],
        "sc": sc[i],
        "datelong": datelong[i],
        "dateshort": dateshort[i],
        "weekshu": weekshu[i], 
        "day1": day1[i],
        "day2": day2[i],
        "day3": day3[i], 
        "day4": day4[i],
        "day5": day5[i],
        "T1": T1[i],  
        "T2": T2[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], 
        "title1":title1[i],   
        "topic11":topic11[i],   
        "topic12":topic12[i],   
        "pre1":pre1[i],   
        "j1gc": j1gc[i],
        "title2":title2[i],   
        "topic21":topic21[i],   
        "topic22":topic22[i],   
        "pre2":pre2[i],   
        "j2gc": j2gc[i],
        "title3":title3[i],   
        "topic31":topic31[i],   
        "topic32":topic32[i],   
        "pre3":pre3[i],   
        "j3gc": j3gc[i],
        "title4":title4[i],   
        "topic41":topic41[i],   
        "topic42":topic42[i],   
        "pre4":pre4[i],   
        "j4gc": j4gc[i],
        "title5":title5[i],   
        "topic51":topic51[i],   
        "topic52":topic52[i],   
        "pre5":pre5[i],   
        "j5gc": j5gc[i],
        "fs1": fs1[i],
        "fs11": fs11[i],
        "fs2": fs2[i],
        "fs21": fs21[i]																	
    
    }
    tpl = DocxTemplate(zpath+'05 WeeklyPlan.docx')
    tpl.render(context)
    tpl.save(file_path+r"\{} 第{}周 周计划({})({}{}班下学期).docx".format('%02d'%weekshu[i],weekhan[i],sc[i],grade[i],classnum[i]))

四、把周计划第一页(周计划部分)变成图片(上传园园通)

 

 

'''
作者:毛毛 
性质:转载
原网址 https://zhuanlan.zhihu.com/p/367985422

安装python,确保以下模块已经安装:win32com,fitz,re
在桌面新建文件夹,命名为:word2pdf2png
将需要转换的word(只能docx格式,可以多个)放入文件夹word2pdf2png
复制以下代码并运行。

本代码只生成png 文件夹内只有一级,子文件不生成

说明:
1、
2、把“03 新周计划生成(原版)”的内容复制到“04 新周计划(没有反思的打印)”
3、把“04 新周计划(没有反思的打印)”内容复制到“05 新周计划(没有反思的jpg上传)”
4、然后“05 新周计划(没有反思的jpg上传)”文件夹删除并生成第一张无反思的图片20份
5、空余时间。把““03 新周计划生成(原版)”文件夹的内容复制到“08 新周计划生成(手动修改-准)”文件夹,手动修改
(1)周计划第一页反思(限定在一页内)
(2)教案等
'''
#coding=utf-8
from win32com.client import Dispatch
import os
import re
import fitz
wdFormatPDF = 17 #转换的类型
zoom_x=2 #尺寸大小,越大图片越清晰 5超大,这里改成2
zoom_y=2 #尺寸大小,越大图片越清晰,长宽保持一致
rotation_angle=0#旋转的角度,0为不旋转

# import os
# #导入os模块
# save_path=r"D:\test\02办公类\90周计划4份\04 周计划\03 docx to jpg"
# #在桌面上创建文件夹
# if os.path.exists(save_path):#判断文件夹是否存在
#     print(f'文件夹{save_path}已存在!')
# else:
#     print(f'文件夹{save_path}不存在,可以创建')
#     os.mkdir(save_path)#创建文件夹

# 把(原版)文件夹里的资料复制到(没有反思的打印)
#coding=utf-8
import os
import shutil

old_path = r'D:\test\02办公类\90周计划4份\04 周计划\03 新周计划生成(原版)'  # 要复制的文件所在目录
new_path = r'D:\test\02办公类\90周计划4份\04 周计划\04 新周计划(没有反思的打印)'  #新路径

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)

# 把(没有反思的打印)文件夹里面所有的文档中的1,8格子里面的内容全部删除(不要反思)

from docx import Document
import os

pathall=[]
path =r'D:\test\02办公类\90周计划4份\04 周计划\04 新周计划(没有反思的打印)' 
for file_name in os.listdir(path):
    print(path+'\\'+file_name)
    pathall.append(path+'\\'+file_name)
print(pathall)
print(len(pathall))# 19


for h in range(len(pathall)):    # 19份19行
    path=pathall[h]
    doc = Document(path)
    # 获取所有表格对象
    tables = doc.tables
    # 获取word中第一个表格(周计划表)
    table = tables[0]    
    # # 反馈与调整(变化很大)不导入
    table.cell(1,8).text=' '
    doc.save(path)    # 重新保存docx(此时没有反思)

# 把“没有反思的docx”复制到“JPG上传”文件夹里
import os
import shutil

old_path2 = r'D:\test\02办公类\90周计划4份\04 周计划\04 新周计划(没有反思的打印)'  # 要复制的文件所在目录
new_path2 = r'D:\test\02办公类\90周计划4份\04 周计划\05 新周计划(没有反思的jpg上传)'  #新路径

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

FindFile2(old_path2)

#生成PDF和图片
def doc2pdf2png(input_file):

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.(docx|doc)$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                word = Dispatch('Word.Application')
                doc = word.Documents.Open(filename)
                doc.SaveAs(filename.replace(".docx", ".pdf"), FileFormat=wdFormatPDF)
                doc.Close()
        word.Quit()

    for root, dirs, files in os.walk(input_file):
        for file in files:
            if re.search('\.pdf$', file):
                filename = os.path.abspath(root + "\\" + file)
                print('filename', filename)
                # 打开PDF文件
                pdf = fitz.open(filename)
                # 逐页读取PDF
                for pg in range(0, pdf.pageCount):
                    page = pdf[pg]
                    # 设置缩放和旋转系数
                    trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
                    pm = page.getPixmap(matrix=trans, alpha=False)
                    # 开始写图像
                    pm.writePNG(filename.replace('.pdf', '') + str(pg+1) + ".png")
                pdf.close()

doc2pdf2png(r'D:\test\02办公类\90周计划4份\04 周计划\05 新周计划(没有反思的jpg上传)')

# 删除生成文件PDF  和 生成文件docx
for parent, dirnames, filenames in os.walk('D:/test/02办公类/90周计划4份/04 周计划/05 新周计划(没有反思的jpg上传)'):
    for fn in filenames:
        if fn.lower().endswith('.pdf'):
            os.remove(os.path.join(parent, fn))
        if fn.lower().endswith('.docx'):# 删除原始文件docx 正则[pdf|docx]套不上,只能分成两条了
            os.remove(os.path.join(parent, fn))
           
# 删除png中,尾号是2-8的png(Word只要第一页,后面生成的第二页图片不要
for parent, dirnames, filenames in os.walk('D:/test/02办公类/90周计划4份/04 周计划/05 新周计划(没有反思的jpg上传)'):
        for fn in filenames:
            for k in range(2,9):                # png文件名的尾数是2,3,4,5,6,7,8 不确定共有几页,可以把9这个数字写大一点)
                if fn.lower().endswith(f'{k}.png'):  # 删除尾号为2,3,4,5,6,7,8的png图片 f{k}='{}'.formart(k) 
                    os.remove(os.path.join(parent, fn))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/478797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring2:创建和使用

目录 1.创建Spring项目 1.1创建Maven类 1.2添加Spring支持框架 1.3添加启动类 2.存储Bean对象 2.0 spring项目中添加配置文件(第一次) 2.1创建Bean 2.2把Bean注册到容器中 3.获取并使用Bean对象 3.1创建上下文 3.2获取指定Bean对象 getBean()方法 --> 获取什么…

双周赛103(模拟、网格图BFS、树状数组)

文章目录 双周赛103[6406. K 个元素的最大和](https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/)模拟 [6405. 找到两个数组的前缀公共数组](https://leetcode.cn/problems/find-the-prefix-common-array-of-two-arrays/)模拟 [6403. 网格图中鱼的最大数目](…

Java 基础进阶篇(一)——— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static:代表静态的意思,可…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 collate_fn函数理解与记录

目录 Dataloader取数据过程使用报错:默认collate_fn处理不同长度的数据自定义collate_fn伪代码示例 Dataloader取数据过程 取出大小等同于batch size的index列表;将列表列表中的index输入到dataset的getitem()函数中,取出该index对应的数据;对每个index…

一种基于坑位模版的分页方案

一. 概述 1.1 业务诉求 想象一个向用户展示数据的下拉列表,数据的来源有多种方式。支持在每一页都按固定的数据源类型及顺序展示。 1.2 业务场景 up主的主页展示带货商品列表 商品来源有多种:up主自选、官方推荐的、根据up主风格AI推荐用户推荐视频列表…

【编辑刷新数据-汽车品牌展示 Objective-C语言】

一、我们这个利用可重用cell展示汽车品牌案例,就说完了,然后我们再给大家说一个什么东西,就是这个刷新数据这个东西, 1.刷新数据这个东西,我们用的就是代理,再把代理相当于是再给大家复习一下,再把代理复习一下,顺便再说一下怎么刷新数据, 2.接下来,要实现一个什么功…

基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

day9 实现UDP通信

目录 socket函数拓展 UDP通信实现过程 代码实现 socket函数拓展 send与recv函数: /*用于发送数据*/ ssize_t send(int sockfd, const void *buf, size_t len,int flags);/*用于接收数据*/ ssize_t recv(int sockfd, void *buf, size_t len,int flags);/*前三个…

无敌0代码ESP8266接入homeassistant的新方法,完美解决新版homeassistant无法自定义MQTT设备的问题

记得之前想要在homeassistant中添加MQTT设备只要在配置文件 configuration.yaml 中配置如下代码即可 但是现在这种方法已经行不通,设备也步显示出来,这给很多homeassistant的忠实粉丝带来巨大不便,作为粉丝的一份子,我绝步允许这种…

Python进阶篇(四)-- ICMP Ping服务程序框架

Ping是一个网络应用程序,用于测试某个主机在IP网络中是否可访问。它也用于测试计算机的网卡或测试网络延迟。Ping的实现通常使用ICMP协议。ICMP协议在协议族中的地位如下图所示: 通过本文,你将更好地理解因特网控制报文协议(ICMP&…

TCP协议的特性

目录 TCP协议的特性TCP的首部长度2.TCP如何实现可靠传输2.1 确认应答 2.2 超时重传3.建立连接3.1 三次握手3.2 四次挥手 4.滑动窗口5.流量控制6.拥塞控制7.延时应答8.捎带应答9.面向字节流10.异常情况1.进程关闭 /进程崩溃2.主机关机(正常流程关机)3.主机掉电 TCP协议的特性 TC…

预训练模型之BERT、Transformer-XL、XL-Net等

文章目录 预训练模型(Pre-trained Models, PTMs)前置知识BERTTransformer-XLXLNetTransformer-XL类似工作(Scalable Transformer)1. 《Scaling Transformer to 1M tokens and beyond with RMT》2. 《》 预训练模型(Pre…

IPsec中IKE与ISAKMP过程分析(主模式-消息5和消息6)

IPsec中IKE与ISAKMP过程分析(主模式-消息1)_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析(主模式-消息2)_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析(主模式-消息3)_搞搞搞高傲的博客…

XML解析

XML在以后更多的是用来作为配置文件的。 一. 配置文件 什么是配置文件 用来保存程序在运行时需要的一些参数。 当配置信息比较复杂的时候&#xff0c;我们就可以用XML。 二. XML概述 三. XML的创建、语法规则 根标签就是写在最外面的标签。 <?xml version"1.0&quo…

[已成功]在mac上安装FFmpeg,详细全过程

记录一次痛苦的在mac上安装ffmpeg的过程 前言在 mac 上下载安装ffmpeg的试探之路1、从官方网站下载FFmpeg软件包2、选择用于macOS 64位的静态构建。这将使你重定向到evermeet.cx网站。3、通过 Homebrew 安装 FFmpeg3.1、在使用 Homebrew 安装的过程中可能会出现的问题3.1.1 墙的…

【MySQL】初识MySQL

数据库的重要性相信不需要我在这里着重强调了,这个专栏重点介绍的就是MySQL数据库,我所使用的版本为5.6,大致思路是先介绍MySQL的操作,然后再深入了解其底层原理,那就开始吧 目录 1.数据库相关概念2.MySQL数据模型3.SQL语法3.1 通用语法3.2 SQL语法分类3.3 DDL语句3.3.1数据库…

python读取与写入tif图片的完整信息

一、导入gdal包 在anconda环境下&#xff1a; conda install gdal 在其他环境下&#xff0c;去这个网站下载gdal包&#xff0c;直接使用pip install gdal是不行的 注意&#xff1a; 对于liunx用户&#xff0c;建议使用conda安装&#xff0c;对于win用户两者都可以。 使用方…

ChatGPT提示词工程(一):Guidelines准则

目录 一、说明二、安装环境三、Guidelines准则一&#xff1a;写出明确而具体的说明方法1&#xff1a;使用分隔符清楚地表示输入的不同部分方法2&#xff1a;用结构化输出&#xff1a;如直接要求它以HTML或者JSON格式输出方法3&#xff1a;请模型检查是否满足条件方法4&#xff…

深入理解计算机系统1--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…

[EDA]AMP®-Parkinson‘s Disease Progression Prediction

​ 翻译自&#xff1a;AMP - EDA Models 1.数据集观察 加载四个excel文件 import pandas as pd train_clinical_data pd.read_csv(input/train_clinical_data.csv) train_peptides pd.read_csv(input/train_peptides.csv) train_protiens pd.read_csv(input/train_prote…