阿阳的 Word 二次开发简明教程,本文仅用于个人学习,除此之外,无其他任何用途。
因个人能力有限,本文难免有所疏漏/错误,不妥之处还请各位批评指正。
一、前沿
依惯例开篇来个直击灵魂的问题:为什么采用 Python 语言二次开发 Word ? 这一切都是因为 Python 。
• Python 是一种代表简单主义思想的语言,简单易学,应用范围广泛 。
• 拥有大量第三方库,可轻易实现各种应用程序间的数据交换,如 Word 与 Excel/AutoCAD 间的数据交换。
• 只要具有基础的 Python 编程能力,就可实现对 Word 的二次开发,而不必特意学习 VBA 。
与 Excel 拥有丰富的 Python 模块相比,二次开发 Word 的模块相对较少,截止目前,主要有:docx 和 win32com 。由于 docx 部分功能无法实现,且为在二次开发中没有使开发者直接了解到 Word 程序的组织架构,故本文利用 win32com 模块实现对 Word 的二次开发。
win32com 模块是一个处理 windows 应用的扩展,调用 Excel 只是该库能实现的一小部分功能,利用该库用户还可以调用 windows 平台上的其他各种应用程序,如 Word、AutoCAD、SAP2000、Abaqus 等等。因此,充分利用好该库可进行很多软件的二次开发。
采用 win32com 模块进行 Word 二次开发,初期学习成本相对较高 (不过也没高多少),需要随时查看庞杂的 Word 二次开发帮助文档,但这有助于更深刻的理解 Word 的程序架构,而且还能实现更多的功能。
其他库虽然上手容易,但这都是第三方给你定义好的调用规则,用户和 Word 间的交互要在这些库内部进行信息中转,然后库的后台完全按照官方帮助文档中定义的规则完成 Word 的调用。这虽然降低了用户的使用难度,但显然学习这些库的使用规则没有更多的通用性和意义,即你无法将你对这个库的了解推广到其他应用程序的调用上,相当于学习了个二手知识。这种学习方式不是不对,而是了解的不全面。当遇到该库实现不了的功能,你可能会手足无措,无从下手。而且库的更新肯定会滞后Word 的更新,这也为及时适配最新版本的 Word 带来了些许麻烦。
当然,你只是想简简单单的实现 Python 对 Word 的调用,除此也没什么特别的需求,那以上各种库就可以看心情,想用哪个用哪个。若想实现各种应用程序的大串联,又不想学习太多的库的使用规则,那么 win32com 是绝对值得选择的。该库不单独存在,可通过安装 pywin32 获取。
以上纯属个人理解,如有错误请各位批评指正。
值得注意的是,如果操作的文档通用性不强,显然,以二次开发的创建 Word 文档没有提效的意义,直接点软件不好么。
有价值的 Word 二次开发主要有三个部分:文字、表格、图片。
1.1 python-docx库
目前,关于 docx 库的参考资料已经很丰富,本文不做赘述。主要资料如下:
• PiPy:python-docx 0.8.10 。
• GitHub:mikemaccana/python-docx Archived 。
• Documentation:python-docx 0.8.10 documentation 。
• Blog:python Word模块 。
python - docx库操作简单,上手相对容易,但目前只能直接操作 docx 文件,且仅能部分功能无法实现。不能实现的原因是该库作者可能没有编写相关的接口函数。
1.2 pywin32库
pywin32 是一个 Python 库,为 Python 提供访问 Windows API 的扩展,提供了齐全的 Windows 常量、接口、线程以及COM 机制等,了解更多详见博客:如何利用Python和win32编程避免重复性体力劳动(一) 。
如已安装 Anaconda,在 Anaconda Prompt 中键入 pip install pywin32 便可自动完成该库的导入;如未安装 Anaconda,也可 pip 手动导入,其在PyPI (Python Package Index) 上的注册地址为: https://pypi.org/project/pywin32 。
本文通过 pywin32 库调用 Word 程序,本文中的 Word 版本为 Word 2016,其余版本的调用类似。
COM (Component Object Model,组件对象模型) 是微软公司于1993年提出的一种组件技术,它是一种平台无关、语言中立、位置透明、支持网络的中间件技术。
组件对象模型,一种面向对象的编程模式。它定义了对象在单个应用程序内部或多个应用程序之间的行为方式。它是微软对于网页服务器与客户端、增益集与 Office 系列软件之间交互的一项软件组件技术。
1.3 帮助文档
Word 二次开发的有关信息可在如下两个官方网站中查看:
- Microsoft:office 开发人员中心 Word
- GitHub:MicrosoftDocs/VBA-Docs/word/Concepts
二、与 Word 的连接
# -*- coding: utf-8 -*-
"""
=============================
Author: DalNur
Email: [email protected]
=============================
"""
import win32com.client
import os
wrdApp = win32com.client.Dispatch("Word.Application")
wrdApp.DisplayAlerts = False # 关闭警告
wrdApp.Visible = True # 程序可见
当批处理数据时,没必要显示 Word 程序界面,可将其设置为后台运行,代码如下:
# 后台运行,不显示,不警告
wrdApp.DisplayAlerts = False # 关闭警告
wrdApp.Visible = False # Word invisible
若上述设置无效,Word 仍然显示界面,那么说明在代码运行前你的电脑上已运行着 Word 进程,此时,需要手动将其关闭,然后再运行 Python 代码。
三、文档 Document
未完,待续 . . .
未完,待续 . . .
未完,待续 . . .