怎么用Python实现自动化处理Word文档(python,Word,开发技术)

时间:2024-04-28 00:14:19 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

希望大家仔细阅读,能够学有所成!

使用Python实现Word文档的自动化处理,包括批量生成Word文档、在Word文档中批量进行查找和替换、将Word文档批量转换成PDF等。

1. 批量生成Word文档

安装openpyxl模块

pipinstallopenpyxl

安装python-docx模块

pipinstallpython-docx

openpyxl模块可以读写扩展名为.xlsx/.xlsm/.xltx/.xltm的Excel文件。

python-docx模块可以读写扩展名为.docx的Word文档,但不能处理扩展名为.doc的Word文档。

importre

fromdocx.enum.tableimportWD_CELL_VERTICAL_ALIGNMENT,WD_TABLE_ALIGNMENT
fromopenpyxlimportload_workbook
fromdocximportDocument

definfo_update(doc,old_info,new_info):
"""
文档内容替换
:paramdoc:Word模板文档
:paramold_info:源文本
:paramnew_info:新文本
:return:
"""

遍历Word文档中的所有段落

forparaindoc.paragraphs:

遍历每个段落中的run对象

forruninpara.runs:

替换run对象的文本内容

run.text=run.text.replace(r'《'+old_info+'》',new_info)

run.text=run.text.replace(old_info,new_info)
run.text=re.sub(r'[《》]','',run.text)

遍历Word文档中的所有表格

fortableindoc.tables:

遍历表格中的所有行

forrowintable.rows:

遍历行中的所有单元格

forcellinrow.cells:

替换单元格内容

cell.text=cell.text.replace('《'+old_info+'》',new_info)

设置表格中的内容居中显示

计算表格的rows和cols的长度

rows=len(table.rows)
cols=len(table.columns)

循环将每一行,每一列都设置为居中

forrinrange(rows):
forcinrange(cols):
table.cell(r,c).vertical_alignment=WD_CELL_VERTICAL_ALIGNMENT.CENTER#垂直居中
table.cell(r,c).paragraphs[0].paragraph_format.alignment=WD_TABLE_ALIGNMENT.CENTER#水平居中

wb=load_workbook('学生成绩表.xlsx')#打开工作簿
ws=wb.active#激活工作簿中的工作表

遍历工作表的行,从第2行开始

forrowinrange(2,ws.max_row+1):
doc=Document('成绩通知书.docx')#创建文档对象

遍历工作表的列

forcolinrange(1,ws.max_column+1):

读取当前列的第一行,即列标题,单元格的值转换成字符串

old_info=str(ws.cell(row=1,column=col).value)

读取当前列的数据,单元格的值需要转换成字符串

new_info=str(ws.cell(row=row,column=col).value)

进行内容替换

info_update(doc,old_info,new_info)
student_name=str(ws.cell(row=row,column=1).value)
doc.save(f'scores\成绩单--致{student_name}.docx')

测试文件:

怎么用Python实现自动化处理Word文档

怎么用Python实现自动化处理Word文档

测试效果:

怎么用Python实现自动化处理Word文档

怎么用Python实现自动化处理Word文档

2. 将Word文档批量转换成PDF

安装pywin32模块

pipinstallpywin32
frompathlibimportPath
fromwin32com.clientimportconstants,gencache

创建Path对象

路径要使用绝对路径

src_folder=Path(r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\scores')
output_folder=Path(r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\PDF')

判断输出目录是否存在

ifnotoutput_folder.exists():

不存在则创建

output_folder.mkdir(parents=True)

file_list=list(src_folder.glob('*[.docx|.doc]'))#获得要转换的Word文档的路径列表

word=gencache.EnsureDispatch('Word.Application')#创建Word程序对象

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

forword_pathinfile_list:

生成转换后的PDF文件的保存路径

pdf_path=output_folder/word_path.with_suffix('.pdf').name#with_suffix()返回文件后缀已更改的新路径

判断pdf文件路径是否已存在

ifpdf_path.exists():
continue
else:

路径需要是绝对路径,否则会报错

doc=word.Documents.Open(str(word_path),ReadOnly=1)#打开Word文档

设置导出格式为pdf

doc.ExportAsFixedFormat(str(pdf_path),constants.wdExportFormatPDF)#将打开的Word文档另存为PDF文件,保存到给定的路径
doc.Close()#关闭Word文档
word.Quit()#关闭Word程序窗口

测试文件:

怎么用Python实现自动化处理Word文档

测试效果:

怎么用Python实现自动化处理Word文档

3. 在Word文档中批量标记关键词

importwin32com.clientaswin32

路径要使用绝对路径

input_file=r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\劳动合同.docx'
output_file=r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\劳动合同1.docx'
word=win32.gencache.EnsureDispatch('Word.Application')#打开一个Word程序窗口
word.Visible=False#设置窗口为隐藏状态,即在后台运行
cs=win32.constants#导入Word开发接口提供的预设常量集合
doc=word.Documents.Open(input_file)#打开要处理的Word文档

设置要标记的关键词列表

keyword_list=['报酬','保险','培训','解除','终止']

设置每个关键词的突出显示颜色

color_list=[cs.wdYellow,14,cs.wdGreen,cs.wdRed,13]
"""
值--颜色常量--含义:
1--wdBlack--黑色
2--wdBlue--蓝色
3--wdTurquoise--青绿色
4--wdBrightGreen--鲜绿色
5--wdPink--粉红色
6--wdRed--红色
7--wdYellow--黄色
8--wdWhite--白色
9--wdDarkBlue--深蓝色
10--wdTeal--青色
11--wdGreen--绿色
12--wdViolet--紫罗兰色
13--wdDarkRed--深红色
14--wdDarkYellow--深黄色
15--wdGray50--50%灰色
16--wdGray25--25%灰色
"""

forw,cinzip(keyword_list,color_list):#使用zip()函数将关键词列表和标记颜色列表中的元素一一配对分别赋给w和c
word.Options.DefaultHighlightColorIndex=c#设置突出显示的颜色
findObj=word.Selection.Find#创建Find对象
findObj.ClearFormatting()#清除查找文本的格式,表示查找文本时不限制文本格式
findObj.Text=w#设置查找文本
findObj.Replacement.ClearFormatting()#清除替换文本的格式设置
findObj.Replacement.Text=w#将替换文本设置为与查找文本相同的值
findObj.Replacement.Font.Bold=True#设置替换文本的格式为加粗
findObj.Replacement.Font.Italic=True#设置替换文本的格式为斜体
findObj.Replacement.Font.Underline=cs.wdUnderlineDouble#设置替换文本加双下划线
findObj.Replacement.Highlight=True#设置替换时对文本做突出显示
findObj.Execute(Replace=cs.wdReplaceAll)#执行查找和替换,wdReplaceAll表示全部替换

将处理后的word文档以新的文件名另存

doc.SaveAs(output_file)

关闭Word文档

doc.Close()

关闭Word程序窗口

word.Quit()

测试效果:

怎么用Python实现自动化处理Word文档

4. 在Word文档中批量替换关键词

frompathlibimportPath
importwin32com.clientaswin32

创建Path对象

src_folder=Path(r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\Files')
output_folder=Path(r'E:\pythonProject\python办公自动化\第5章自动化处理Word文档\output_files')

判断输出文件夹是否存在

ifnotoutput_folder.exists():

创建文件夹

output_folder.mkdir(parents=True)
file_list=list(src_folder.glob('*.docx'))#获得给定文件的word文档路径列表

以替换前的关键词作为建,以替换后的内容作为值,建立字典

replace_dict={'确定':'确认','订立':'签订','执行':'履行'}
word=win32.gencache.EnsureDispatch('Word.Application')#打开Word程序窗口
word.Visible=False#设置窗口隐藏
cs=win32.constants#导入Word开发接口提供的预设常量集合
forfileinfile_list:
doc=word.Documents.Open(str(file))#打开Word文档
print(file.name)
forold_txt,new_txtinreplace_dict.items():
findObj=word.Selection.Find#创建Find对象
findObj.ClearFormatting()#清除查找文本的格式,表示查找文本时不限制文本格式
findObj.Text=old_txt#设置查找文本
findObj.Replacement.ClearFormatting()#清除替换文本的格式设置
findObj.Replacement.Text=new_txt#设置替换文本

判断Find对象的Execute()函数在文档中是否找到关键词

iffindObj.Execute(Replace=cs.wdReplaceAll):#执行查找和替换,wdReplaceAll表示全部替换
print(f'{old_txt}-->{new_txt}')
new_file=output_folder/file.name#生成输出文件的路径
doc.SaveAs(str(new_file))##将处理后的word文档以新的文件名另存
doc.Close()#关闭Word文档
word.Quit()#关闭Word程序窗口

测试效果:

怎么用Python实现自动化处理Word文档

怎么用Python实现自动化处理Word文档

本文:怎么用Python实现自动化处理Word文档的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么用C#实现文件与字符串互转下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18