需求:修改指定目录下所有文件的页眉页脚,或者往里面添加内容。
1. 这里做了word的实现和excel的实现,如下:
需要先安装 pip3 install pywin32,另外页眉页脚格式设置可以参考:
word:
浅谈Word.Application,关于js操作word文档的使用_new word.application-CSDN博客
excel:
Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,_xlwings教程-CSDN博客文章来源:https://www.toymoban.com/news/detail-759021.html
import os
import xlwings as xw
import win32com.client as win32
import pythoncom
#将需要替换页眉页脚的文档放到path下
path = r'C:\Users\d\Desktop\pdf改名脚本\22\2022年\test'
#原始页眉页脚内容
old_name = u'999'
#新页眉页脚内容
new_name = u'888'
#替换失败记录日志
err_log = path + u'\\head修改出错列表.txt'
def log(text):
with open( err_log,"a+" ) as f:
f.write(text)
f.write('\n')
def change_headerfooter(path):
''' 更改文件的页眉页脚 '''
pythoncom.CoInitialize()
word = win32.Dispatch('Word.Application')
#print(dir(word))
word.Visible = 0
word.DisplayAlerts = 0
exapp = xw.App(visible=False, add_book=False)
# excel = win32.Dispatch('Excel.Application')
# excel.Visible = 0
# excel.DisplayAlerts = 0
for parent, dirnames, filenames in os.walk(path):
for fn in filenames:
filedir = os.path.join(parent, fn)
#获取需替换目录下的docx结尾的文档名称
if fn.endswith('.docx') or fn.endswith('.doc'):
print(filedir)
try:
doc = word.Documents.Open( filedir )
a = word.ActiveDocument.Sections
n = 0
for i in range( len(a) ):
#获取当前页眉
head = word.ActiveDocument.Sections[i].Headers[0]
old_head = str(head)
#获取当前页脚
foot = word.ActiveDocument.Sections[i].Footers[0]
old_foot = str(foot)
#print( old_head )
#if old_name in old_head:
if 1:
#old_name存在页眉中时,进行进行替换
#用于替换页眉
#new_head = old_head.replace( old_name, new_name )
#用于补充页眉
#new_head = old_head + new_name
#print( new_head )
word.ActiveDocument.Sections[i].Headers[0].Range.Find.ClearFormatting()
word.ActiveDocument.Sections[i].Headers[0].Range.Find.Replacement.ClearFormatting()
#页眉重置
word.ActiveDocument.Sections[i].Headers[0].Range.Delete()
#设置字体大小
word.ActiveDocument.Sections[i].Headers[0].Range.Font.Size=20
#设置对齐方式,0-左;1-中;2-右
word.ActiveDocument.Sections[i].Headers[0].Range.ParagraphFormat.Alignment = 0
word.ActiveDocument.Sections[i].Headers[0].Range.InsertAfter(new_name)
#替换旧页眉
#word.ActiveDocument.Sections[i].Headers[0].Range.Find.Execute( old_head, False, False, False, False, False, False, 1, False, new_name, 2 )
#if old_name in old_foot:
if 1:
##old_name存在页脚中时,进行进行替换
#new_foot = old_foot.replace( old_name, new_name )
#new_foot = old_foot + new_name
word.ActiveDocument.Sections[i].Footers[0].Range.Find.ClearFormatting()
word.ActiveDocument.Sections[i].Footers[0].Range.Find.Replacement.ClearFormatting()
#页脚重置
word.ActiveDocument.Sections[i].Footers[0].Range.Delete()
word.ActiveDocument.Sections[i].Footers[0].Range.InsertAfter(new_name)
#替换旧页脚
#word.ActiveDocument.Sections[i].Footers[0].Range.Find.Execute( old_foot, False, False, False, False, False, False, 1, False, new_name, 2 )
n = n+1
doc.Close()
except Exception as e:
print(e)
log(str(filedir))
if fn.endswith('.xlsx') or fn.endswith('.xls'):
print(filedir)
try:
ex = exapp.books.open(filedir)
#print(dir(ex.sheets))
sheet = ex.sheets
print(sheet[0].name)
if 'test' == sheet[0].name:
print(sheet.name)
else:
#如果第一个sheet不是test则加一个test的sheet
sheet.add('test',before=sheet[0].name)
ex.save()
ex.close()
except Exception as e:
log(str(filedir))
word.Quit()
exapp.quit()
change_headerfooter(path)
补充一下:excel没有用pywin32去读写因为莫名其妙就是卡进程,无法对excel读写,可能和缓存的excel有关,如要编辑3.xlsx,则会卡一个~3.xlsx的进程无法结束。就换成了xlwings去读写。文章来源地址https://www.toymoban.com/news/detail-759021.html
到了这里,关于python 学习笔记20 批量修改页眉页脚的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!