最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的。就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这样无聊的工作,确定目标后我便开始在网上寻找有没有造好的轮子,但是结果让我有点儿失望。关于python操作页眉页脚的文章屈指可数,仅存在的几篇也都是片段代码,仅仅可以参考而已,于是我便决定自己是实现批量替换页眉页脚的脚本。

经过搜集资料发现,python可以通过win32com以及docx扩展包来实现对word的操作,但是经过实际操作发现docx对文件页眉页脚的处理不是很理想,于是我最终决定使用win32com来实现此功能。

使用的模块确定下来后就是思路的问题,小小的记录一下:

1、替换页眉页脚可以分成两个部分来实现,一个是针对单个文件的处理,另一个是针对文件夹下所有文件的处理,为了分别对此两种情况进行不同的处理使用if判断语句来让程序进入不同的逻辑。

2、针对文件夹下所有文件需要处理的情况,则使用python的内置模块os将文件夹下所有doc文件的绝对绝对路径拼接出来,以便实现对每一个文件的操作。对于单个文件的处理则不需要这样来做,只需要将文件的决定路径确定下来即可。

3、在确定了文件的路径之后便开始进行对word的操作,在进行测试过程中发现这里存在一个很大的坑,那就是word分节符的存在,分节符将整个word文档分成了若干部分,每个部分的页眉和页脚是独立的,在这个地方绕了我好几个小时。最终经过查资料发现section就是word的中每一个部分的对象,使用它便可以分别定位到每一个部分,解决了这个问题后剩下的逻辑便一气呵成。

接下来直接上代码:

import win32com,os,sys,re

from win32com.client import Dispatch, constants

import os,time

class Change_file_footer_header():

'''批量更改word文件的页眉页脚'''

def __init__( self ):

self.file_or_files = input('请选择需要修改文件或者文件夹 only 代表只修改一个文件 many 代表修改文件夹下的所有文件 :')

self.method = input( '请选择需要更改的类型 1 代表页眉,2代表页脚:')

self.path = input( '请输入需要更改文件的目录名称:')

self.old_name = input( '请输入需要更替换的名称:')

self.new_name = input( '请输入替换的名称:')

def change_header( self ,path ,file ):

''' 更改文件的页眉 '''

w = win32com.client.Dispatch('Word.Application')

w.Visible = 0

w.DisplayAlerts = 0

doc = w.Documents.Open( path )

a = w.ActiveDocument.Sections

n = 0

for i in range( len(a) ):

name = w.ActiveDocument.Sections[i].Headers[0]

old_name = str(name)

print( old_name )

if self.old_name in old_name:

new_name = old_name.replace( self.old_name,self.new_name )

print( new_name )

w.ActiveDocument.Sections[i].Headers[0].Range.Find.ClearFormatting()

w.ActiveDocument.Sections[i].Headers[0].Range.Find.Replacement.ClearFormatting()

w.ActiveDocument.Sections[i].Headers[0].Range.Find.Execute( self.old_name, False, False, False, False, False, False, 1, False, self.new_name, 2 )

n = n+1

doc.Close()

create_time = time.strftime('%Y/%m/%d:%H/%M/%S', time.localtime(time.time()))

text = '{} : {}文件====总共替换了{}个页眉'.format(create_time, file, n)

self.log(text)

def change_footer( self ,path ,file ):

''' 更改文件的页脚 '''

w = win32com.client.Dispatch('Word.Application')

w.Visible = 0

w.DisplayAlerts = 0

doc = w.Documents.Open( path )

a = w.ActiveDocument.Sections

n = 0

for i in range( len(a) ):

name = w.ActiveDocument.Sections[i].Footers[0]

old_name = str(name)

print( old_name )

if  self.old_name in old_name:

new_name = old_name.replace( self.old_name,self.new_name )

print( new_name )

w.ActiveDocument.Sections[i].Footers[0].Range.Find.ClearFormatting()

w.ActiveDocument.Sections[i].Footers[0].Range.Find.Replacement.ClearFormatting()

w.ActiveDocument.Sections[i].Footers[0].Range.Find.Execute( self.old_name, False, False, False, False, False, False, 1, False, self.new_name, 2)

n = n+1

doc.Close()

create_time = time.strftime('%Y/%m/%d:%H/%M/%S',time.localtime(time.time()))

text = '{} : {}文件====总共替换了{}个页脚'.format( create_time,file, n)

self.log(text)

def change_file_header( self ):

''' 循环遍历所输入的文件夹 '''

for root, dirs, files in os.walk( self.path ):

for i in files:

if i.split('.')[1] == 'docx' or i.split('.')[1] == 'doc':

print( '更改文件的名称',i )

file_path = os.path.join( root,i )

self.change_header( file_path ,i )

#time.sleep( 1 )

def change_file_footer( self ):

''' 循环遍历所需要修改页脚的文件夹 '''

for root, dirs, files in os.walk( self.path ):

for i in files:

if i.split('.')[1] == 'docx' or i.split('.')[1] == 'doc':

print( '更改文件的名称',i )

file_path = os.path.join( root,i )

self.change_footer( file_path ,i )

def log(self,text):

'''输出日志模块'''

file_name = './' + time.strftime('%Y%m%d%H',time.localtime(time.time())) + '.' + 'txt'

with open( file_name,"a+" ) as f:

f.write( text )

f.write( '\n' )

def run( self ):

if self.file_or_files == 'only':

file_name = self.path.split( '\\' )[ -1 ]

if self.method == '1':

self.change_header( self.path ,file_name )

elif self.method == '2':

self.change_footer( self.path,file_name )

elif self.file_or_files == 'many':

if self.method == '1':

self.change_file_header()

elif self.method == '2':

self.change_file_footer()

else:

print( '请输入正确的选择 only或者 many' )

if __name__ == '__main__':

Change_file_name = Change_file_footer_header()

Change_file_name.run()

python对word文档内容进行批量替换_python 使用win32com实现对word文档批量替换页眉页脚...相关推荐

  1. Python初学尝试:word批量刷格式转PDF,替换页眉页脚

    Python初学尝试:word批量刷格式转PDF,替换页眉页脚 初学尝试 round 1 ronund 2 easygui round 4 PyQt5 round 4 wxpython 小结 初学尝试 ...

  2. python读取word页眉_python批量替换页眉页脚实例代码

    简介 本文分享的实例代码主要通过python语言实现批量替换页眉页脚的操作功能,具体如下. 代码 #!/usr/bin/env python # -*- coding: utf-8 -*- impor ...

  3. java poi读取word中附件_java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  4. java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  5. Python操作Word文档的节属性和页眉/页脚

    封面图片:<Python程序设计实验指导书>(ISBN:9787302525790),董付国,清华大学出版社 图书详情(京东): 可与董付国老师的<Python程序设计(第2版)&g ...

  6. 批量修改html文件内容,批量修改word文件内容 批量修改WORD文件的页眉页脚

    批量修改多个Word文档内容 同时批量修改多个word文档步骤1把要批量修改的文档都放在同一个文件夹中同时批量修改多个word文档步骤2在修改前,先确定多个word文档文件要被修改的内容如小小要修改的 ...

  7. 同一篇Word文档设置多个不同的页眉页脚

    如果在Word文档中创建了页眉.页脚,那么在默认情况下,一篇文章从头到尾的页眉页脚都是一样的. 但有时,我们还需要根据不同的章节内容而设定不同的页眉页脚.有的朋友将不同的章节分别保存成不同的文件,然后 ...

  8. Word文档设置多个不同的页眉页脚

    如果在Word文档中创建了页眉.页脚,那么在默认情况下,一篇文章从头到尾的页眉页脚都是一样的. 但有时,我们还需要根据不同的章节内容而设定不同的页眉页脚.有的朋友将不同的章节分别保存成不同的文件,然后 ...

  9. python 操作word页眉表格_python批量设置多个Excel文件页眉页脚的脚本

    本文实例为大家分享了python批量设置多个Excel文件页眉页脚的具体代码,供大家参考,具体内容如下 import os import openpyxl from openpyxl.workshee ...

最新文章

  1. 判断正则 shell_年薪百万之路--第七十八天 Linux基础 shell
  2. 计算机视觉、机器学习相关领域论文和源代码大集合
  3. NameError: name 'long' is not defined
  4. IIAI CVPR 2019 跟踪、检测、分割论文荐读
  5. 酷开网络首推“无界空间”,酷开系统8正式发布!
  6. wojilu系统的ORM代码解析-[源代码结构分析,用特性和反射来感知属性-特性介绍篇]...
  7. oracle rman optimization,关于RMAN中的优化(Optimization)
  8. BIM应用落地:基于BIM的群塔作业方案优化
  9. 还在为word排版而发愁?word的实验报告模板word数学建模模板免费领~(开头直接放百度网盘链接,直接拿去用就行)
  10. 领域划分的规则是什么?
  11. conda 查看现有虚拟环境 - 删除现有虚拟环境
  12. Oracle 月初、月末等时间获取示例
  13. 【视觉-单目三维重建-理论篇】单目视觉三维重建----论文调研1
  14. python结合mitmproxy抓包实践
  15. scrcpy替换minicap
  16. packet tracer 下载及简介
  17. matlab中nargin函数
  18. xgboost自定义损失函数评估函数
  19. SPI总线传输的4种模式
  20. KEAZ128学习(三)--- GPIO和PORT

热门文章

  1. 怎么把avi转成mp4格式?
  2. 计算机应用实训室建设方案,计算机应用实训基地建设方案.doc
  3. 中国计算机技术职业资格网(软考)2021,2021上半年全国软考准考证打印入口:中国计算机技术职业资格网...
  4. css 3d 魔方模型
  5. REST 架构指导方案
  6. 明朝第一才子杨慎十首诗词
  7. 关于UBNT网桥真实吞吐量
  8. android 暴风影音目录,暴风影音Android正式版发布!详细评测
  9. 火山安卓组件之轻量阅读器
  10. matlab如何取等距点,matlab编程等距取点 - 程序语言 - 小木虫 - 学术 科研 互动社区...