阿陽的 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
未完,待續 . . .
未完,待續 . . .
未完,待續 . . .