作品展示:——word表格的关键词批量加粗
背景需求:
生成正确的19周周计划内容
每个教案里面的“重点提问:”“小结:”“过渡语:”都是加粗设置
但是由于提取的是“活动过程下面的的整段内容,所以的加粗字体进入新的模板后,都变成了宋体小4不加粗
”重点提问“”小结“”过渡语“的数量很多,过去通过网络查询,我找到可以批量替换表格里的文字并加粗的代码。
本段代码可以实现 指定词语的加粗!!!
本次我用AI生成了加粗的代码,但是出现两种结果:
1、把“重点提问”所在的整段加粗,
2、把“重点提问“所在整段复制一份
3、要么就删除了加粗的字体。字体格式都变了
所以还是用原来的代码。直接实现了加粗的效果
素材准备
04合成周计划里面有19个文件,教案部分的字体都没有加粗
都没有加粗
转出文件夹里空的
重点说明:
将docx所有的“提问“”改成“重点提问”,可能会出现"重点重点提问“,再删除一个“重点”,全部都改成“重点提问
代码展示:
'''
docx教案的表格里的“重点提问”“过渡语”“小结”加粗
(使用【办公类-22-05】周计划系列(5)-Word关键词加粗(把所有“小结”“提问”的文字设置 的代码)
作者:VBA-守候、阿夏补充
时间:2024年3月14日
'''
import os
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合成新周计划' # 要复制的文件所在目录
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() # 保存并关闭文件,根据需要设置
aDoc.Close() # 保存并关闭文件,根据需要设置
print(f'完成,共替换了{i}个表格')