【办公类-06】Python VS 批量替换多个docx文档里的词语

办公需求

       批量周计划后发现里面的某些文字需要替换,如“小结”变成“小结:”,“提问”变成“重点提问”,搜索多个已有的相关代码后,发现它们虽然能够替换文字,但是也同时把周计划表格部分的格式清洗了一次——加粗居中的字体全部不加粗居左。  

需求实现:

    不断搜索后,最终在简书找到一个可以不改变原格式的docx的内部文字替换的优质代码。花了几个小时尝试注释代码,朦胧地了解设计流程。随后通过全网搜索,微调代码内容,用四行代码实现了输入input查找替换的功能。

'''
作者:小强聊成长
链接:https://www.jianshu.com/p/39eb9fc1606d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
'''
 
from pathlib import Path
import win32com.client as win32
 
yml = Path('C:\\Users\\Administrator\\Desktop\\5\\')#替换前文件都放在这个文件夹 
xml = Path('C:\\Users\\Administrator\\Desktop\\6\\')#可以自动生成 替换后文件 
# xml = Path('C:\\Users\\Administrator\\Desktop\\5\\')#替换前替换后的文字在同一个文件内,覆盖替换

if not xml.exists():#如果替换后的文件路径不存在
    xml.mkdir(parents=True) #自动创建一个替换后的目录 比如桌面没有文件夹2 但会自动生成
    # mkdir创建目录
    # parents:如果父目录不存在,是否创建父目录。mkdir(parents=True, exist_ok=True)如果父目录是存在,那么根据需要创建这条路径
# 
file_list = list(yml.glob('*.docx'))# glob获取一个可编历对象,使用它可以逐个获取匹配的文件路径名
# 文件列表等于 列表(遍历替换前目录中的docx)
 
# 阿夏设置成input手动输入“替换前词语、替换后词语” 但是只能输入一个词语替换
# replace_dict={}# 替换字典的字典为空  这条在这里可以省略
old=input("替换前词语:\n")
new=input("替换后词语:\n")
replace_dict={old:new}# 替换字典的名字的键为old的值,值为new的值,都不要冒号,这里测了很久才成功
# print(contacts)
 
# 原作者的替换方法是直接把两个词语写在字典里,支持多个。
# replace_dict = {'张三:'李四',
#                 '方案':'计划',
#                }# 替换字典包括
word = win32.gencache.EnsureDispatch('Word.Application')
# win32com.client.gencache源文件目录代码  EnsureDispatch确保调用word

word.Visible = False# 属性不可见
cs1 = win32.constants # win32常量?
for i in file_list: # 遍历 替换前的文件夹中docx文件内容
    doc= word.Documents.Open(str(i))    # 打开文件,并将其添加到文档集合。返回Document对象。
    print(i.name)  #打印 word文件名的名字 例第8周的周计划(大8班下学期).docx
    for old_txt, new_txt in replace_dict.items(): 
        # 若旧名和新名在替换字典的项目列表里
        # findobj返回根对象的句柄和所有子对象  
        findobj = word.Selection.Find   #  如果查找操作成功,选定内容就会更改。 
        findobj.ClearFormatting()#清楚格式
        findobj.Text = old_txt  #旧文字
        findobj.Replacement.ClearFormatting()         # 替换部分清楚格式
        findobj.Replacement.Text = new_txt     #新文字          
        if findobj.Execute(Replace=cs1.wdReplaceAll):            # 实施 替换所有匹配项
            print(f'{old_txt}-->{new_txt}')             # 打印替换内容
    new_file = xml / i.name 
    # 新文件的路劲 等于 新文件路径(前面的路径) / 内部的Word文件名字   如 C:\Users\Administrator\Desktop\6\第3周的周计划(大8班下学期).docx 
    #                                                              如 C:\Users\Administrator\Desktop\6\第4周的周计划(大8班下学期).docx
    doc.SaveAs(str(new_file)) 
    # 保存新文件名
    doc.Close()
    # 关闭文件
word.Quit()
# word退出

输入词语并运行

效果展示:

替换前:5文件夹内 的docx   标题是 小(8)班

 替换后:6文件夹内 的docx   标题是 大(8)班(每篇都改过了)

 

不过我还没有找到可以多个docx批量替换内容,并把替换后的字体加粗的代码。为了赶时间,只能手动一页页周计划打开,把“小结”两个字批量查找替换加粗,废了不少时间。学过python,再也不想做这么蠢的重复劳动了,后续努力把这个代码研究出来

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值