使用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的资料请关注Devmax其它相关文章!

Python实现自动化处理Word文档的方法详解的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部