Python 二次开发 Word 简介


阿阳的 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 二次开发主要有三个部分:文字、表格、图片。


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 系列软件之间交互的一项软件组件技术。


在这里插入图片描述

Word文档的组成

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 代码。


在这里插入图片描述

Word进程的关闭

三、文档 Document


未完,待续 . . .

未完,待续 . . .

未完,待续 . . .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章