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

news/2025/2/16 1:55:49/

背景需求:

【办公类-22-01】周计划系列(1)-生成“信息窗”(提取旧docx内容,写入EXCLE模板,再次生成新docx)

前一篇介绍了生成”信息窗“的过程,本篇介绍周计划的第2款内容——主题说明的生成

  我发现:每当换一个教室,如果想要继续使用门前原有的信息窗结构,就要适应不同的板式风格。本次的信息窗都是A4横版的,因此原有的“信息+主题”合并版资料,以及全部竖版的4份资料内容,都需要修改成A4横版(竖版变成程横版)

思路:

把“2018年的中5班主题说明(8个Word-A4竖版)”中的内容,批量生成导成“2023年-中6班下学期主题说明(8个Word-A4横版)

步骤: 

1、提取“2018年-中5班上学期主题说明”(8份docx)的内容,分别将”主题说明“”主题目标“”家园共育“里面的内容导入模板EXCLE的不同单元格中,

2、用{{}}的方法提取EXCEL数据,批量生成新内容、新格式的“2023年-中6班下学期主题说明”(8份docx)

一、旧数据(2018年主题知识)的文件名的修改(01+docx):

0、材料准备:

1、旧文件名样式展示——2018年的,并且都是doc格式

2、把周次变成两位数(原文件已经是01 02格式了,所以这里不做编号)

3、把所有doc变成docx,否则不能提取

 运行后,转为docx,删除原来的doc

import os
from win32com import client as wc
import time
#  注意:目录的格式必须写成双反斜杠
path="D:\\test\\02办公类\\90周计划4份\\02 主题知识2\\旧主题知识\\"  # 使用绝对地址(可更改)
files=[]
for file in os.listdir(path):# 找出文件中以.doc结尾并且不以~$开头的文件(~$是为了排除临时文件)if file.endswith('.doc') and not file.startswith('~$'): files.append(path+file)for file in files:word = wc.Dispatch("Word.Application")print("已处理文件:"+files[0])# 打开文件doc = word.Documents.Open(files[0])# 将文件另存为.docxdoc.SaveAs("{}x".format(files[0]), 12)    # 12表示docx格式doc.Close()# 删除原doc文件os.remove(files[0])# 在files数组中删除第一个文件地址(已处理的文件地址)del files[0]word.Quit()time.sleep(0.5) # 暂停0.5秒

doc转docx的效果

二、旧数据(2018年信息窗)的文件内容的修改(删除空行):

1、删除每个docx文档里面的空行

(无论有没有空行,都做一下删除,以便能够确定最后的索引范围)

  

from docx import Document
from openpyxl import load_workbook
import globimport os
path  = r'D:\test\02办公类\90周计划4份\02 主题知识2'for file in glob.glob(path + r'\旧主题知识\*.docx'):   # 读取所有以前的信息窗参考资料doc = Document(file)for paragraph in doc.paragraphs:  # 读取文档段落if len(paragraph.text) == 0:p = paragraph._elementp.getparent().remove(p)p._p = p._element = Nonedoc.save(file)
# # ————————————————
# # 版权声明:本文为CSDN博主「lsjweiyi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# # 原文链接:https://blog.csdn.net/lsjweiyi/article/details/121728630

运行后,8份主题说明里面的空行都删除了,没有”空行、换行、手动换行符等“

 (把去掉空行的8份Word放到“”docx(无空行)“”文件夹里面备用)

 三、信息窗Docx指定部分内容导入EXCLE内

1、docx模板制作——主题知识_模板.docx

2、EXCLE模板——主题知识过渡模板.xlsx

 3、代码

# https://blog.csdn.net/lau_jw/article/details/114383781from docx import Document
from openpyxl import load_workbook
import glob#  将模板 Excel 读取进程序:
path  = r'D:\test\02办公类\90周计划4份\02 主题知识2'
workbook = load_workbook(path + r'\主题知识过渡模板.xlsx')
sheet = workbook.activenumber = 0for file in glob.glob(path + r'\旧主题知识\*.docx'):   # 读取所有以前的主题知识参考资料print(file)doc= Document(file)# 提取三个加粗标题所在的行数    # 参考https://www.shouxicto.com/article/96876.html#获取每个文档的行数  print("段落数:"+str(len(doc.paragraphs)))#段落数为13,每个回车隔离一段# 读取标题:title=[]for paragraph1 in doc.paragraphs[0:1]:        # 第0行标题t1 = paragraph1.text             # 只要原周计划中间的段落内容    title.append(t1[5:])print(title)      content1 = '\n'.join(title)      # 组合并加回车#输出每一段的内容for para in doc.paragraphs:    print(para.text) # “主题说明“固定在1行,所以不用查找了 h0=1#查找“主题目标”所在的行for i in range(len(doc.paragraphs)):  # print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text)  if '主题目标' in doc.paragraphs[i].text:h1=iprint(h1)#查找“家园共育”所在的行for i in range(len(doc.paragraphs)):  if '家园共育' in doc.paragraphs[i].text:h2=iprint(h2)#家园共育结束值等于-3h3=-3# 提取“主题说明”sm = []for paragraph2 in doc.paragraphs[h0+1:h1]:        #          主题说明h0固定是1行,所以从2开始提取,主题目标 是提取的行数h1-1, 索引取值,还是h1t2 = paragraph2.text               sm.append(t2)print(sm)    content2 = '\n'.join(sm)      # 组合并加回车# 提取“主题目标”mb = []for paragraph3 in doc.paragraphs[h1+1:h2]:        #          主题目标 是提取的行数+1,家园共育 提取行数-1 索引取值,还是h2t3 = paragraph3.text               mb.append(t3)print(mb)  content3 = '\n'.join(mb)      # 组合并加回车# 提取“家园共育”gy = []for paragraph4 in doc.paragraphs[h2+1:-2]:        #         家园共育 是提取的行数+1,删除最后两行的班级日期,范围是-2t4 = paragraph4.text             gy.append(t4)print(gy)  content4 = '\n'.join(gy)      # 组合并加回车number += 1sheet.append([number, content1,content2,content3,content4])  # number是序号,一共遍历提取了几分Word的内容,content是主题知识中间部分的内容workbook.save(path + r'\中6班下学期主题知识.xlsx')

代码重点:

1、思路一:将“主题说明”等三个关键词批量加粗。

      但是目前读取的docx数据再次转换为docx时,所有的格式都清除了,目前还没有找到能够将关键词加粗的代码。要么手动将三个标题加粗。

2、思路二:读取“主题说明”等三个加粗标题所在的行数,

     观察代码,发现它是读取段落[0:X]的,只要确定起始段和终止段,就可以把中间的非加粗部分内容太提取出来。

  每份”主题知识。docx”的”主题说明“都在行数1,但”主题目标“”家园共育“的行数不同(3行和4行、6行和7行)。因此需要用代码进行提取 

提取到“加粗标题“的行数后,就可以制作索引范围,取出中间非加粗部分的内容写入EXCLE

 4、写入EXCLE的内容1-代码直接导入的

(序号num、标题title、主题说明sm 、主题目标mb、家园共gy) 

5、写入EXCLE的内容2-手动复制进去的

把班级和合并后的周次日期复制到“中6班下学期主题知识.xlsx”的指定单元格内。

(也可以写个代码调入,这里就不写了,手动复制)

 (班级、时间)

四、EXCLE信息窗内容转化为新模板新时间的周计划

1、检查word模板

 模板中输入各种{{English}}——标题加粗(黑体三号)、段落(1.5行距)、字体(宋体小三)、0空行……这些都在word模板里面调整好

 2、检查EXCLE表格

 3、代码展示

# 一、导入相关模块,设定excel所在文件夹和生成word保存的文件夹
from docxtpl import DocxTemplate
import pandas as pd
import os
import xlwt
import xlrd
import os
import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time
import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTzpath=r'D:\\test\\02办公类\\90周计划4份\\02 主题知识2'+'\\'
print(zpath)file_path=zpath+r'\新主题知识(下学期)'
print(file_path)# 二、遍历excel,逐个生成word(小标签.docx是前面的模板)
try:os.mkdir(file_path)
except:passtpl = DocxTemplate(zpath+'主题知识_横版.docx')
list = pd.read_excel(zpath+'中6班下学期主题知识.xlsx')title = list["title"].str.rstrip()
num=list["num"]
sm=list["sm"].str.rstrip()# 没有str.rstrip()是数字格式
mb=list["mb"].str.rstrip()# 没有str.rstrip()是数字格式
gy=list["gy"].str.rstrip()# 没有str.rstrip()是数字格式
classroom =list["classroom"].str.rstrip() # str.rstrip()都是文字格式
# T1 =list["T1"].str.rstrip() # 没有str.rstrip()是数字格式
# T2 =list["T2"].str.rstrip()# 没有str.rstrip()是数字格式
time=list["time"].str.rstrip() # 遍历excel行,逐个生成
numnum = list.shape[0]
for i in range(numnum):context = {"num": num[i],"title": title[i],"sm": sm[i],  "mb" :mb[i],"gy" :gy[i],      "classroom": classroom[i],       "time": time[i],      }tpl = DocxTemplate(zpath+'主题知识_横版.docx')tpl.render(context)tpl.save(file_path+r"\{}主题知识_{}({}班下学期).docx".format('%02d'%num[i],title[i],classroom[i]))

 ​​​

 五:最终效果展示:

基本都在一页A4横版上 

   

 六:后续操作

1、手动修改更新信息:

修改内容:主题说明的内容不修改,内容都是固定的。实际上只要调整板式、班级、日期

 2、确保在一页A4上:

有些周次的内容数量多,会超过一页。需要手动调整(删除空行、删除段落、调整间距等)

 3、多周一份

可以一次性批量打印好

感悟:

1、docx段落内容导入EXCEL,再转成新docx。速度快,可以反复修正。太神奇了!

2、完成第2个周计划”主题说明“的文本转移,后续继续研究育儿知识、周计划(教案)的内容转移。


http://www.ppmy.cn/news/37001.html

相关文章

操作系统权限维持(十四)之Linux系统- Strace监听SSH来源流量记录密码后门

系列文章 操作系统权限维持(一)之Windows系统-粘贴键后门 操作系统权限维持(二)之Windows系统-克隆账号维持后门 操作系统权限维持(三)之Windows系统-启动项维持后门 操作系统权限维持(四&…

ElasticSearch 索引创建

准备工作 在开始创建索引之前,您需要安装Elasticsearch并启动Elasticsearch服务器。您还需要使用一个REST客户端,例如Kibana或Postman,以便与Elasticsearch进行交互。 创建一个索引 要创建Elasticsearch索引,请执行以下步骤&am…

Linux进程控制-3

本片作为进程控制的最后一篇博客,来讲述进程控制中的最后一模块:程序替换的内容。 目录 程序替换 1.内容 2.接口 2.1execve 2.2execv 2.3execvp 2.4execl 2.5execlp 2.6execle 程序替换 1.内容 在真正了解程序替换之前,我们首先…

Java云电子病历系统源码,提供电子病历在线制作、管理和使用的一体化电子病历

这是一套SaaS模式Java版云HIS系统的子系统云电子病历系统源码,本系统采用前后端分离模式开发和部署,支持电子病历四级。 文末获取源码联系! 本电子病历系统主要为医院住院部提供医疗记录依据,协助医务人员在医疗活动过程中通过信…

蓝桥杯嵌入式--实战模拟题

前言在蓝桥杯省赛举办之前,学校组织了一场模拟赛,基于第十三届的省赛题,但是难度略高于省赛,这篇博客记录一下解题的过程,其思路可供大家参考。详细工程目前先联系我获取。题目详情实现思路分析花个十几分钟把题目好好…

Linux常用文件系统简述

Linux操作系统支持多种类型的文件系统,在这里我将简要介绍几种常见的Linux文件系统。1. EXT4EXT4是最为常用,最早和稳定的Linux文件系统之一,它是EXT3文件系统的升级版。EXT4采用了更高效的方式组织磁盘空间,支持更大的分区和更高…

2022年业绩逆势增长,“要强”蒙牛再创蒙牛

2022年是蒙牛“再造一个新蒙牛”五年计划的第二年,也是乳企赛道疫情以来最为艰难的一年,这一年里,不仅有疫情多点散发所带来的线下渠道不畅,也有原材料价格飙涨所导致的成本高企。 在这种形势下,蒙牛尽管遭遇多重困难…

第18章_MySQL8其它新特性

第18章_MySQL8其它新特性 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,…