自动化处理Word文档

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

1. 批量生成Word文档

  • 安装openpyxl模块
pip install openpyxl
  • 安装python-docx模块
pip install python-docx

openpyxl模块可以读写扩展名为.xlsx/.xlsm/.xltx/.xltm的Excel文件。
python-docx模块可以读写扩展名为.docx的Word文档,但不能处理扩展名为.doc的Word文档。

import refrom docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT, WD_TABLE_ALIGNMENT
from openpyxl import load_workbook
from docx import Documentdef info_update(doc, old_info, new_info):"""文档内容替换:param doc: Word模板文档:param old_info: 源文本:param new_info: 新文本:return:"""# 遍历Word文档中的所有段落for para in doc.paragraphs:# 遍历每个段落中的run对象for run in para.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文档中的所有表格for table in doc.tables:# 遍历表格中的所有行for row in table.rows:# 遍历行中的所有单元格for cell in row.cells:# 替换单元格内容cell.text = cell.text.replace('《' + old_info + '》', new_info)# 设置表格中的内容居中显示# 计算表格的rows和cols的长度rows = len(table.rows)cols = len(table.columns)# 循环将每一行,每一列都设置为居中for r in range(rows):for c in range(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行开始
for row in range(2, ws.max_row + 1):doc = Document('成绩通知书.docx')  # 创建文档对象# 遍历工作表的列for col in range(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')

测试文件:


测试效果:

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

  • 安装pywin32模块
pip install pywin32
from pathlib import Path
from win32com.client import constants, gencache# 创建Path对象
# 路径要使用绝对路径
src_folder = Path(r'E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\scores')
output_folder = Path(r'E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\PDF')
# 判断输出目录是否存在
if not output_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')
for word_path in file_list:# 生成转换后的PDF文件的保存路径pdf_path = output_folder / word_path.with_suffix('.pdf').name  # with_suffix()返回文件后缀已更改的新路径# 判断pdf文件路径是否已存在if pdf_path.exists():continueelse:# 路径需要是绝对路径,否则会报错doc = word.Documents.Open(str(word_path), ReadOnly=1)  # 打开Word文档# 设置导出格式为pdfdoc.ExportAsFixedFormat(str(pdf_path), constants.wdExportFormatPDF)  # 将打开的Word文档另存为PDF文件,保存到给定的路径doc.Close()  # 关闭Word文档
word.Quit()  # 关闭Word程序窗口

测试文件:

测试效果:

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

import win32com.client as win32# 路径要使用绝对路径
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%灰色
"""for w, c in zip(keyword_list, color_list):  # 使用zip()函数将关键词列表和标记颜色列表中的元素一一配对分别赋给w和cword.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()

测试效果:

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

from pathlib import Path
import win32com.client as win32# 创建Path对象
src_folder = Path(r'E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\Files')
output_folder = Path(r'E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\output_files')
# 判断输出文件夹是否存在
if not output_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开发接口提供的预设常量集合
for file in file_list:doc = word.Documents.Open(str(file))  # 打开Word文档print(file.name)for old_txt, new_txt in replace_dict.items():findObj = word.Selection.Find  # 创建Find对象findObj.ClearFormatting()  # 清除查找文本的格式,表示查找文本时不限制文本格式findObj.Text = old_txt  # 设置查找文本findObj.Replacement.ClearFormatting()  # 清除替换文本的格式设置findObj.Replacement.Text = new_txt  # 设置替换文本# 判断Find对象的Execute()函数在文档中是否找到关键词if findObj.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文档相关推荐

  1. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...

  2. python自动化办公模块有哪些-Python 自动化办公|Word文档

    [Python 自动化办公]专栏是介绍如何利用python办公,减少工作负荷.篇幅精炼,内容易懂,无论是否有编程基础,都非常适合. 在上次文章中,我们学习了[用python写入excel],这次我们学 ...

  3. Python爬取“Python小屋”公众号所有文章生成独立Word文档

    封面图片:<Python程序设计实验指导书>(ISBN:9787302525790),董付国,清华大学出版社 图书详情:https://item.jd.com/12592638.html ...

  4. python数据写入表格生成图片_python在word文档里插入图片和表格实例代码演示

    # -*- coding: UTF8 -*- from docx import Document from docx.shared import Pt doc = Document() # 文件存储路 ...

  5. php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件

    将word文档转化为HTML文件 function wordTohtml($wfilepath) { $word=new COM("Word.Application") or di ...

  6. abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档

    码农的两大烦恼: 别人的代码没有文档 别人居然要求我给我的代码写文档 文档的质量差,数量少,甚至根本没有文档是软件工程面临的普遍问题. 什么是合格的文档? 任何对于代码的补充性文本都是文档,包括代码的 ...

  7. python中docx模板合并多个word文档

    转载链接:https://stackoverflow.com/questions/24872527/combine-word-document-using-python-docx from docx ...

  8. python word 合并单元格_在word文档选项卡中检测合并单元格

    一点背景 我有一个软件规范,我需要以表格的形式解析需求.它们的格式也不总是相同的.我继承了一个python脚本,它使用win32com解析word文档,然后openpyxl将需求导出到excel文件, ...

  9. [Work Summary] Python将PDF转换成Word文档

    美图欣赏2022/08/21 在我们平时的工作和日常生活中,有时候需要将PDF文件转换成Word文件.为此,决定使用Python自己实现将PDF转换成Word文档的功能需求 编写如下程序代码(pdf2 ...

  10. Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

    很多时候,您需要替换 Word 文档中的特定文本或短语.MS Word 具有针对此类情况的内置功能,您可以一键替换所需的文本.在本文中,您将学习如何使用 Python 以编程方式查找和替换 Word ...

最新文章

  1. MySQL系列:innodb源代码分析之线程并发同步机制
  2. centos7根据进程号查看进程位置
  3. 【渝粤题库】国家开放大学2021春2322物流信息技术题目
  4. linux 远程调试文件夹,GDB远程调试开发板程序
  5. 随想录(SEO笔记)
  6. 快速排序——主要思想是分治
  7. JavaScript - 用户名表单验证
  8. java番茄钟_番茄时间管理 - java Swing版
  9. input输入框历史记录清除
  10. 微信公众号、小程序和企业微信申请流程
  11. (三)基础网络演进、分类与定位的权衡
  12. spo0lsv病毒分析
  13. AndroidStudio 制作一个超简易记账本App(1.0)【含详细步骤】
  14. android硬解码
  15. 洛谷 3455 (莫比乌斯反演优化)
  16. Python快慢指针法
  17. 在托马斯·哈代的五月中学习机器学习之新闻分类
  18. android 按键映射文件,按键映射专业版
  19. 【快速找回删除的文件的方法汇总】
  20. 2022中国电子学会青少年软件编程C语言一级测试题

热门文章

  1. java实现房屋出租系统
  2. html输入公式得到混合运算结果,EXCEL公式与函数教案
  3. 质量管理体系审核员考试注册实习转正指南
  4. 关于JeeSite框架Shiro序列化漏洞修复解决方法
  5. jeeSite起步初始化数据库安装 (my.ini)
  6. C#窗体标准计算器(上) 初级新手请多担待。
  7. 为什么摄像头模块功耗和EMI需要求助SerDes?
  8. eclipse 连 mysql 数据库 jdbc下载
  9. 上采样、下采样到底是什么?
  10. (附源码)计算机毕业设计java宠物领养饲养交流管理平台