Python实现办公自动化读书笔记——自动化处理Word文档
自动化处理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文档相关推荐
- Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例...
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 平阳歌舞新承宠,帘外春寒赐锦袍. ...
- python自动化办公模块有哪些-Python 自动化办公|Word文档
[Python 自动化办公]专栏是介绍如何利用python办公,减少工作负荷.篇幅精炼,内容易懂,无论是否有编程基础,都非常适合. 在上次文章中,我们学习了[用python写入excel],这次我们学 ...
- Python爬取“Python小屋”公众号所有文章生成独立Word文档
封面图片:<Python程序设计实验指导书>(ISBN:9787302525790),董付国,清华大学出版社 图书详情:https://item.jd.com/12592638.html ...
- python数据写入表格生成图片_python在word文档里插入图片和表格实例代码演示
# -*- coding: UTF8 -*- from docx import Document from docx.shared import Pt doc = Document() # 文件存储路 ...
- php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件
将word文档转化为HTML文件 function wordTohtml($wfilepath) { $word=new COM("Word.Application") or di ...
- abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档
码农的两大烦恼: 别人的代码没有文档 别人居然要求我给我的代码写文档 文档的质量差,数量少,甚至根本没有文档是软件工程面临的普遍问题. 什么是合格的文档? 任何对于代码的补充性文本都是文档,包括代码的 ...
- python中docx模板合并多个word文档
转载链接:https://stackoverflow.com/questions/24872527/combine-word-document-using-python-docx from docx ...
- python word 合并单元格_在word文档选项卡中检测合并单元格
一点背景 我有一个软件规范,我需要以表格的形式解析需求.它们的格式也不总是相同的.我继承了一个python脚本,它使用win32com解析word文档,然后openpyxl将需求导出到excel文件, ...
- [Work Summary] Python将PDF转换成Word文档
美图欣赏2022/08/21 在我们平时的工作和日常生活中,有时候需要将PDF文件转换成Word文件.为此,决定使用Python自己实现将PDF转换成Word文档的功能需求 编写如下程序代码(pdf2 ...
- Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本
很多时候,您需要替换 Word 文档中的特定文本或短语.MS Word 具有针对此类情况的内置功能,您可以一键替换所需的文本.在本文中,您将学习如何使用 Python 以编程方式查找和替换 Word ...
最新文章
- MySQL系列:innodb源代码分析之线程并发同步机制
- centos7根据进程号查看进程位置
- 【渝粤题库】国家开放大学2021春2322物流信息技术题目
- linux 远程调试文件夹,GDB远程调试开发板程序
- 随想录(SEO笔记)
- 快速排序——主要思想是分治
- JavaScript - 用户名表单验证
- java番茄钟_番茄时间管理 - java Swing版
- input输入框历史记录清除
- 微信公众号、小程序和企业微信申请流程
- (三)基础网络演进、分类与定位的权衡
- spo0lsv病毒分析
- AndroidStudio 制作一个超简易记账本App(1.0)【含详细步骤】
- android硬解码
- 洛谷 3455 (莫比乌斯反演优化)
- Python快慢指针法
- 在托马斯·哈代的五月中学习机器学习之新闻分类
- android 按键映射文件,按键映射专业版
- 【快速找回删除的文件的方法汇总】
- 2022中国电子学会青少年软件编程C语言一级测试题