背景需求:

【办公类-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个周计划”主题说明“的文本转移,后续继续研究育儿知识、周计划(教案)的内容转移。

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

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

    背景需求: 1.板式变化; 很多年没有带中班了,今年中6班的信息墙上的所有4份文件都是横版的. 这和以前的的周计划4份资料有区别 以前样式一:信息传和主题知识并在一个A4横版上 以前样式二:信息窗在A ...

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

    代码相当复杂,操作很繁琐,自己都要研究半天T_T 文件夹展示 01提取提取新表的已有内容(提取大8班.大7班的新版本里面的额内容) (需要里面的一些反思,用来占位) 这里有一份根据新模板用Python ...

  3. 【办公类-】周计划-洗牌提取《集体运动》名称

    背景需求: 新的周计划模板上有一个"运动-集体游戏"栏目.内容来自参考用书<运动> 根据新要求,周一的运动集体游戏必须是新的,周二的运动集体游戏来自前一周的内容,因此可 ...

  4. 【办公类-16-05-01】“2022上学期 大班游戏活动室排班表——班主任版21周”(python 排班表系列)

    样式展示:1-8周的内容,一摸一样复制到9-16周.17-24周 背景需求: 8月底,保教主任花了不少时间调试"大班游戏活动室安排表.docx",并多次让我给他调整Word的表格框 ...

  5. 【办公类-16-05-02】“2022上学期 大班游戏活动室排班表——领导版8周”(python 排班表系列)

    样式展示:生成一份按8周排序的"大班活动室安排表" 1.人工排序的样式 2.Python生成的样式和内容 背景需求: 前一个<大班游戏活动室排班表>主要是针对班主任贴周 ...

  6. 【办公类-16-06】“2022下学期 总园活动室(沙水+建构)排班表”(python 排班表系列)

    背景需求: 最近保教主任一直在为总园的活动室安排而头疼不已,和组长们商议许久,依旧无法合理把活动室安排好.3月2日下午,听主任和游戏室成员聊了一个小时的排班,结论是除沙水和建构外,其余空余时间都是&q ...

  7. 【办公类-16-03】“大班运动场地分配表2-斜线排列、5天循环、不跳节日”(python 排班表系列)

    样例展示:不跳过节日+每周场地斜角排列场地循环排序表(8个班级8组内容) 背景需求: 给大班排完后,我又试着给中班组做批量,中班组长说已经请一位组员用人工排aEXCL表. 中班各班起始场地如下: 于是 ...

  8. 【办公类-16-02】“2022上学期 大班运动场地分配表1-跳过节日循环排序”(python 排班表系列)

    样例展示:跳过节日的运动场地循环排序表(8个班级8组内容) 背景需求: 复工复学后,周计划做起来!每周的运动场地安排照旧-- 存在问题(一): 8个大班,靠着人工排序,每周都要推算一次这个规则,推演麻 ...

  9. 【 办公类-03】 VS Python 大8班“运动场地”的周次安排。

    办公需求: 开学了,周计划教案的模板又要调整了.其中"分散活动"的内容需要按一定排序规律,每周填入不同的场地. 为了避免每个班级每天用的场地产生重复,组长制定了场地安排规则. 以大 ...

最新文章

  1. 【青少年编程】【二级】绘制图形
  2. Windows 下 tail 查看日志命令工具分享
  3. 【正一专栏】轮回-从坚信去年骑士会逆转到今年坚定看好勇士横扫
  4. haddler处理队列 netty_如何实现延迟队列
  5. SpringBoot 迭代输出
  6. IntelliJ IDEA快捷键(Shortcut)官方文档地址
  7. freeswitch添加tls加密
  8. mod_signalwire.c:1009 Next SignalWire adoption
  9. TunesKit Video Cutter for mac(视频分割编辑器)
  10. Agisoft Photoscan/Mateshape 相机参数XML解读
  11. ArcCatalog添加数据库连接
  12. 如何实现单行/多行文本溢出的省略样式?
  13. 计算机风扇不工作原理,电脑CPU风扇的工作原理
  14. 国家开放大学人文英语4
  15. SiamRPN++理解
  16. 基于位置服务(Location Based Service)
  17. Spark亚太研究院王家林:从技术的…
  18. 【JY】橡胶支座的简述和其力学性能计算
  19. uniapp 苹果安全区配置
  20. hhkb mac设置_HHKB 纯小白入坑指南

热门文章

  1. iOS生成四位随机数
  2. Anaconda创建虚拟环境、配环境变量步骤笔记
  3. 20164321 王君陶 Exp1 PC平台逆向破解
  4. 20年没堵上股权漏洞,万科沦落到靠安邦搭救,王石也是心大
  5. 轩辕剑在线(swdol)3D模型浏览器
  6. 看这篇C语言基础就够了(2020-04-19)
  7. 放置类游戏用过的资源存档
  8. 1226 寻求勾股数
  9. 厉害了!几行代码搞定ML模型,低代码机器学习Python库正式开源
  10. 解决Python调试OSError: [WinError 193] %1 不是有效的 Win32 应用程序