Python实现自动化处理Word文档的方法详解

目录
  • 1. 批量生成Word文档
  • 2. 将Word文档批量转换成PDF
  • 3. 在Word文档中批量标记关键词
  • 4. 在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 re

from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT, WD_TABLE_ALIGNMENT
from openpyxl import load_workbook
from docx import Document

def 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():
        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程序窗口

测试文件:

测试效果:

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和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()

测试效果:

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文档的方法详解的详细内容,更多关于Python自动化处理Word的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python办公自动化Word转Excel文件批量处理

    目录 前言 首先使用Python将Word文件导入 row和cell解析所需内容 内层解析循环 前言 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改) 一共有近2600条类似格式的表格细栏,每个栏目包括的信息有: 日期 发文单位 文号 标题 签收栏 需要提取其中加粗的这三项内容到Excel表格中存储,表格样式如下: 也就是需要将收文时间.文件标题.文号填到指定位置,同时需要将时间修改为标准格式,如果是完全手动复制和修改时间,

  • Python 自动化处理Excel和Word实现自动办公

    今天我来分享一些Python办公自动化的方法,欢迎收藏学习,喜欢点赞支持,欢迎畅聊. Openpyxl Openpyxl 可以说是 Python 中最通用的工具模块了,它使与 Excel 交互pip install openpyxl pip install python-docx简直就像在公园里漫步一样. 有了它,你就可以读写所有当前和传统的 excel 格式,即 xlsx 和 xls. Openpyxl 允许填充行和列.执行公式.创建 2D 和 3D 图表.标记轴和标题,以及大量可以派上用场的

  • Python自动化办公之Word转PDF的实现

    目录 pdf 工具包 - pdfkit html 转 pdf 网址 转 pdf 字符串生成pdf 结合 pydocx 将 word 转 html 再转 pdf 该章节我们将要学习如何将 word 文件转为 PDF文件,其实网上有很多种生成 PDF 的教程,不过绝大多数都是以 windows 为主的,并且兼容有很多的问题.windows.mac.linux 同时兼容的情况比较少,所以今天的章节我们就来学习一下如何在 windows.mac.linux 三种系统中都可以生成 PDF 的解决方案. p

  • Python自动化办公之Word文件内容的读取

    目录 前言 利用 python 批量读取文件 word利器之python-docx python-docx 安装 python-docx 之 Document python-docx 之段落内容读取 python-docx 之表格内容读取 前言 前面几个章节我们学习了对于普通文件的操作,比如说文件的创建.复制粘贴.裁剪粘贴.文件名的重命名.删除等等.另外还学习了一些基本练习,如何查找文件.如何按照内容查找文件等等. 在本章节及后续,将开始学习一些特殊文件的自动化相关操作.如 word.excel

  • python处理自动化任务之同时批量修改word里面的内容的方法

    #同时修改好几个word文档,转换特定的内容 import re import docx doc1=docx.Document('example.docx') spam=['后勤','技术','行政'] for j in spam: doc2=docx.Document() for i in range(0,len(doc1.paragraphs)): c=re.sub('销售',j,doc1.paragraphs[i].text)#第一个参数表示匹配的项,第二个参数表示要替换成的内容,第三个参

  • Python自动化办公之Word文档的创建与生成

    目录 保存生成 word 生成标题 生成段落 添加图片 添加表格 分页 上几章节我们主要学习了如何读取文章,而主要任务是读取文档中的文本信息,也就是字符串,而图片本身是不可读的文件所以并没有去读取图片.从今天开始将学习如何通过 python 脚本来自动生成一个 word 文档. 保存生成 word 在学习如何生成一个 word 文档之前,我们来看看如何保存生成 word 文件,因为马上就会用到. 使用方法: document_obj.save(文件地址) ---> /home/demo.docx

  • Python实现自动化处理Word文档的方法详解

    目录 1. 批量生成Word文档 2. 将Word文档批量转换成PDF 3. 在Word文档中批量标记关键词 4. 在Word文档中批量替换关键词 使用Python实现Word文档的自动化处理,包括批量生成Word文档.在Word文档中批量进行查找和替换.将Word文档批量转换成PDF等. 1. 批量生成Word文档 安装openpyxl模块 pip install openpyxl 安装python-docx模块 pip install python-docx openpyxl模块可以读写扩展

  • 运用Python巧妙处理Word文档的方法详解

    目录 工具 生成Word案例 读取操作word文档 总结 工具 python3.7 Pycharm Excel python-docx 生成Word案例 创建一个demo.doc文档,代码如下: from docx import Document from docx.shared import Cm,Pt from docx.document import Document as Doc #构建doc对象 document = Document() #操作文档标题 document.add_he

  • 使用PHPWord生成word文档的方法详解

    本文实例讲述了使用PHPWord生成word文档的方法.分享给大家供大家参考,具体如下: 有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑.PHPWord是一个用纯PHP编写的库,使用PHPWord可以轻松处理word文档内容,生成你想要的word文档. 下载源码 安装 我们使用Composer 来安装PHPWord. composer require phpoffice/phpword 如何使用 自动加载 安装好phpword后,新建一个php文档,引入autoload.p

  • Python操作word文档的示例详解

    目录 写在前面 创建一个文档 先实现第一步,写入一个标题 添加文字段落 列表的添加 图片的添加 表格添加 相关样式设置 页眉和页脚 写在前面 python-docx 不支持 doc 文档,一定要注意该点,如果使用 doc 文档,需要提前将其用 Word 相关软件转换为 docx 格式. doc 和 docx 是存在本质差异的,一个是二进制,另一个 XML 格式的文件. 模块的安装 pip install python-docx . 以下网址首先准备好 官方手册:https://python-do

  • Java生成word文档的示例详解

    目录 目标 依赖 模版 实体 代码 目标 依赖 <!-- poi工具类--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.0</version> </dependency> 模版 实体 实体类需要和模版内的动态字段对应 代码 @GetMapping(value =

  • SpringBoot使用swagger生成api接口文档的方法详解

    目录 前言 具体例子 maven配置 项目application.yml配置 springApplication添加swagger注解 在控制层添加swagger注解 前言 在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成swagger接口文档 具体可以查看本站spring boot系列文章: spring boot项目使用mybatis-plus代码生成实例 具体例子 maven配置 在使用之前,我们需要添加s

  • java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/projects/dom4j/  一.介绍及优缺点分析

  • 用PHP实现浏览器点击下载TXT文档的方法详解

    由于现在的浏览器已经可以识别txt文档格式,如果只给txt文档做一个文字链接的话,点击后只是打开一个新窗口显示txt文件的内容,并不能实现点击下载的目的.当然这个问题的解决办法也可以是将txt文件改名为浏览器不认识的文件(比如rar),这样的话,由于浏览器不能识别rar类型的文件,只能让用户下载了.还有一种办法,就是利用代码通过header设置文档的格式来实现点击下载的目的.PHP代码如下:=====================================================

  • python读取word文档的方法

    本文实例讲述了python读取word文档的方法.分享给大家供大家参考.具体如下: 首先下载安装win32com from win32com import client as wc word = wc.Dispatch('Word.Application') doc = word.Documents.Open('c:/test') doc.SaveAs('c:/test.text', 2) doc.Close() word.Quit() 这种方式产生的text文档,不能用python用普通的r方

  • python实现的生成word文档功能示例

    本文实例讲述了python实现的生成word文档功能.分享给大家供大家参考,具体如下: 每月1次的测试费用报销,需要做一个文档.干脆花点时间写个程序吧. # -*- coding: utf-8 -*- from tools import get_data from docx import Document def new_doc(fee_data,doc_path,fee):#新建一个word文档,写入汇总表的数据 document = Document() p_total = document

随机推荐