两种方法实现批量修改Word文件页眉

首先是正经模式,装备python-docx:

import os  
from docx import Document  
from docx.enum.text import WD_BREAK  
  
def replace_text_in_headers(folder_path, old_text, new_text):  
    # 遍历文件夹中的所有文件  
    for filename in os.listdir(folder_path):  
        if filename.endswith('.docx'):  
            # 构建完整的文件路径  
            file_path = os.path.join(folder_path, filename)  
            doc = Document(file_path)  
            # 遍历文档中的所有节  
            for section in doc.sections:  
                # 获取页眉  
                header = section.header  
                # 如果有页眉内容,则替换文本  
                if header:  
                    for paragraph in header.paragraphs:  
                        for run in paragraph.runs:  
                            # 检查并替换文本  
                            text = run.text.replace(old_text, new_text)  
                            run.text = text  
            # 保存修改后的文档  
            doc.save(file_path)  
            print(f'{filename} Done!')
  
folder_to_update = r"D:\header_test"  # 替换为你的文件夹路径  
old_header_text = '一二三四五'  # 要替换的文本  
new_header_text = '上山打老虎'  # 替换后的新文本  
replace_text_in_headers(folder_to_update, old_header_text, new_header_text)
  

然后是裸奔模式:(加特林的火力固然豪横,但榔头加大棒实在精彩ヾ(:3ノシヾ)ノシ 

基本原理看这里:

Word docx文件重命名为zip文件,解压后直接查看和编辑

import zipfile  
import os

# 解压后文件夹压缩回zip
def zip_folder(folder_path, zip_path):  
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:  
        for root, dirs, files in os.walk(folder_path):  # 遍历folder_path文件夹及其所有子文件夹 
            for file in files:  
                file_path = os.path.join(root, file)  # 构建文件的完整路径  
                zipf.write(file_path, file_path[len(folder_path)+1:])  # 将文件添加到zip文件中
# 恢复文件为.docx
def re_name(path):
    old_name = path
    new_name = path[:-4]+'.docx'
    os.rename(old_name, new_name)  
    return new_name
  
fname=[]
# 遍历folder_path文件夹及其所有子文件夹,查找所有.docx文件 
folder_path = r"D:\header_test"  # 替换为你的文件夹路径  
for root,dirs,files in os.walk(folder_path):
    for file in files:
        if file.endswith('.docx'):
            fff=os.path.join(root,file)
            fname.append(fff)
# 对于每个找到的.docx文件 
for file_path in fname:
    # 将.docx文件改名为.zip文件  
    nzip_path=file_path.replace('.docx','.zip')
    os.rename(file_path,nzip_path)
    # 解压.zip文件到新的文件夹  
    new_zip_folder=nzip_path[:-4]
    with zipfile.ZipFile(nzip_path, 'r') as zip_ref:  
        zip_ref.extractall(new_zip_folder)  
    # 修改解压后的文件夹中的header1.xml文件
    header1=new_zip_folder+'\\word\\header1.xml'
    #改header1.xml,即页眉文件
    with open(header1, 'r+',encoding='utf-8') as file:  
        content = file.read()
        header=content.replace('老虎没打着','打到小松鼠')
        file.seek(0)  # 将文件指针移回文件开头,以便写入
        file.write(header)  # 将修改后的内容写回文件 
        file.truncate()  # 删除多余的内容,确保文件大小正确  
    # 获取文件名
    n=new_zip_folder.split('\\')[-1]
    target_zip_path = f"D:\\header_changed\\{n}.zip"  # 替换为你想要保存压缩文件的路径  
    # 将修改后的文件夹重新压缩为.zip文件  
    zip_folder(new_zip_folder, target_zip_path)
    # 将.zip文件恢复为.docx格式  
    new_docx=re_name(target_zip_path)
    # 恢复原文件夹中的.docx文件
    os.rename(nzip_path,file_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值