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


未完,待續 . . .

未完,待續 . . .

未完,待續 . . .

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