阿阳的 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 等等。因此,充分利用好该库可进行很多软件的二次开发。
• Python 二次开发 Excel 简介
• Python 二次开发 AutoCAD 简介
• Python 二次开发 SAP2000 概述
• Abaqus 二次开发 基本概念
• nCodeDL 疲劳计算 基本流程
采用 win32com 模块进行 Word 二次开发,初期学习成本相对较高 (不过也没高多少),需要随时查看庞杂的 Word 二次开发帮助文档,但这有助于更深刻的理解 Word 的程序架构,而且还能实现更多的功能。
其他库虽然上手容易,但这都是第三方给你定义好的调用规则,用户和 Word 间的交互要在这些库内部进行信息中转,然后库的后台完全按照官方帮助文档中定义的规则完成 Word 的调用。这虽然降低了用户的使用难度,但显然学习这些库的使用规则没有更多的通用性和意义,即你无法将你对这个库的了解推广到其他应用程序的调用上,相当于学习了个二手知识。这种学习方式不是不对,而是了解的不全面。当遇到该库实现不了的功能,你可能会手足无措,无从下手。而且库的更新肯定会滞后Word 的更新,这也为及时适配最新版本的 Word 带来了些许麻烦。
当然,你只是想简简单单的实现 Python 对 Word 的调用,除此也没什么特别的需求,那以上各种库就可以看心情,想用哪个用哪个。若想实现各种应用程序的大串联,又不想学习太多的库的使用规则,那么 win32com 是绝对值得选择的。该库不单独存在,可通过安装 pywin32 获取。
以上纯属个人理解,如有错误请各位批评指正。
值得注意的是,如果操作的文档通用性不强,显然,以二次开发的方式创建 Word 文档没有提效的意义,直接点软件不好么。
有价值的 Word 二次开发主要有三个部分:文字、表格、图片。
目前,关于 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 文件,且仅能部分功能无法实现。不能实现的原因是该库作者可能没有编写相关的接口函数。
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 系列软件之间交互的一项软件组件技术。
Word 二次开发的有关信息可在如下两个官方网站中查看:
- Microsoft:office 开发人员中心 Word 。
- GitHub:MicrosoftDocs/VBA-Docs/word/Concepts 。
# -*- 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 代码。
未完,待续 . . .
未完,待续 . . .
未完,待续 . . .