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

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

python 复制代码
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文件,解压后直接查看和编辑

python 复制代码
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)
相关推荐
爱吃苹果的梨叔2 小时前
训练集群网络中断怎么办?智算机房的 Console 串口排障方案
网络·python·智能路由器·php
李妍.5 小时前
02Numpy基础(上)
开发语言·python
TheBestRucy5 小时前
Python 九阳神功之贰:面向对象(下)
开发语言·python
2601_965958466 小时前
口腔黏膜脱皮超2周未愈建议及时就医
人工智能·python
微小冷7 小时前
在不同空间中展示数据(欧式、球面、庞加莱圆盘)
python·双曲空间·微分几何·geomstats·庞加莱圆盘·球面
weixin_431600447 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
讲温控就好了8 小时前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能
人工智能·python·能源
DeepVisionary8 小时前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“
python·自动化
固定资产管理系统软件9 小时前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
TheBestRucy10 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python