背景需求:
花了两天生成把原有教案WORd教案内容导出到EXCLE,修改添加相关内容后再次生成新模板的周计划WORD。每篇教案前面部分也自动生成,获得统一的大小字体间距,
想起去年我辛辛苦苦一个格子一个格子把文字拷贝黏贴到EXCLE!足足用了1周才把资料复制完成。然后再Python生成新的教案。随后就是大量的格式修改内容修改。感觉还是应该在EXCLE里就把内容改掉在生成新的word,这样效率更高(不用一个个文件打开,会搞晕的。)
两天VS五天
再次感叹学编程的价值,会一个代码,可以让办公效率不知快了多少倍,关键是可以反复调试,实现最优结果。
当然生成过程中有一个粗体消失的问题——教案部分的“活动过程”的文字导出时,全部选中【7:-1】写入一个EXCLE单元格,word生成时,原来加粗的部分(一级标题、小结、重难点,提问)等部分的加粗样式会消失。
旧资料里包含了加粗
新生成教案里面失去了加粗设置
新要求:
也就是说,我至少可以先将新生成教案Word中
1、“提问”改成“重点提问(加粗)”
2、“小结”改成“小结(加粗)
材料准备:
建立两个文件夹,08文件夹是没有加粗的教案(内有20份Word文件)、09是用于装被加粗文字的教案Word(空文件夹)
代码演示
'''
标题:Word批量替换两组词语
目标:把周计划中的“提问”“小结”批量改成“重点提问”(加粗)和“小结”(加粗)
作者:阿夏:
时间:2023年5月3日 19:55
'''
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
# old_word=input('旧替换的文字(“提问”)\n')
# old_word1=input('旧替换的文字(“小结”)\n')
# new_word=input('新修改加粗的文字(“重点提问”)\n')
# new_word1=input('新修改加粗的文字(“小结”)\n')
old_word=['提问','小结','重点重点']
new_word=['重点提问','小结','重点']
print('-----第1步:把《08 新周计划生成(手动修改-准)的文件夹》里的资料复制到《09 新周计划生成(部分加粗)》-----')
#coding=utf-8
import os
import shutil
old_path = r'D:\test\02办公类\90周计划4份\04 周计划\08 新周计划生成(手动修改-准)' # 要复制的文件所在目录
new_path = r'D:\test\02办公类\90周计划4份\04 周计划\09 新周计划生成(部分加粗)' #新路径
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 =r'D:\test\02办公类\90周计划4份\04 周计划\09 新周计划生成(部分加粗)'
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() # 保存并关闭文件,根据需要设置
aDoc.Close() # 保存并关闭文件,根据需要设置
print(f'完成,共替换了{i}个表格')
终端运行
作品展示:
问题:出现了“重点重点提问”,再用替换修改程重点提问,改成三个替换,重点重点放在最后索引
重点说明:文本替换的精髓(replacement)
感悟:
搜遍全网,只有这一条帖子实现我的需求,让我的周计划系列批量生成顺利完工,万分感谢。
2、用Python快速批量填充模板,降低错误率,提升了效率。在此基础上,继续手动修改、补充"教案内容“中的细节,完善教案,为下一次提取做准备,让人心情愉快。