天天看點

win32com操作word 第二集:Application&Documents接口

作者:一燈程式設計
本課程《win32com操作word API精講&項目實戰》同步在B站、今日頭條、視訊号及本公衆号釋出。其中本公衆号以釋出文字教程為主。

先回答一個網友私信問題: win32com和微軟的word接口文檔有什麼關系

win32com是pywin32的一個元件,用來做windows文檔程式設計的,win32com底層調用的是word的接口,word接口是由微軟開發的,想檢視win32com的接口情況,隻需要看微軟官方的文檔即可。文檔位址:https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.application?view=word-pia

令入門者雲裡霧裡的API關系

微軟word接口文檔的組織形式說不上有什麼問題,但其接口規模巨大(接近900個,每個接口中少則十幾個,多則幾百個的屬性和方法)的接口及錯綜綜複雜的接口交叉引用足以将一部分入門者拒之門外,着實繁雜。往往看到一個接口即便有詳細的說明,就是無法知曉如何使用,各種嘗試也不得要領,往往最常見的問題是:到底誰來調用這個接口。

要想快速抓住word程式設計的七寸,請一定要認真閱讀下方的講解。

第一點 回憶一下,我們是如何操作一個文檔的
  • 1、打開用戶端
  • 2、建立或打開一個文檔
  • 3、選中某些資源或滑鼠點選準備寫入内容
  • 4、設定格式:頁面設定、字型顔色、縮進等等
  • 5、儲存文檔
  • 6、關閉用戶端

瞧,其實就那麼簡單,别看文檔寫得烏泱烏泱的,從文檔操作的角度去思考,其實這個事并沒有那麼複雜。現在隻需要記住:

  • Application接口是用來控制用戶端的啟動和關閉的,甭管它有多少個直接子級API
  • Documents接口是用來建立和打開文檔的,通過Application.Documents即可調用。記住建立文檔和打開文檔回傳回一個Document對象,要使用變量接受這個對象,這樣才友善我們對這個文檔進行操作。

現在再回過來對照,用戶端打開了,文檔也有了,那使用什麼方法來選中資源呢?接口中有Selection和Range可以實作選中文檔的資源,官方推薦在文檔級程式設計中,優先使用Range接口。這不來了嘛,就是用Range接口來選中資源。那麼誰才有這個資格來調用Range接口呢?答案是:Document,也就是文檔對象,是以上面提到,建立文檔或儲存文檔需要使用變量來接受,就是為了友善後續的操作。

第二點 字型、字号、行間距、頁面設定等等這些如何實作呢

先将word的資源分類:

  • 1、内容類資源,如文字、圖檔、表格、圖表、形狀及公式等
  • 2、文檔設定類資源,如頁眉頁腳、文檔頁面設定

上方兩點分類,通通都能通過Document接口搞定,因為這些資源隻在文檔中才存在呀,即便是頁面設定,也是設定某個文檔的!是以,即便看對應的文檔,我們也能快速知曉調用者就是Document。再者,如果選中了某段文字,想為文字設定格式,各種格式也有獨立的接口,那麼又是誰來調用這些格式接口呢?答案自然是:Range。使用Range選中某個資源,那自然是使用Range來調用這些格式接口。瞧瞧,就是那麼簡單。

第二課的代碼示範

ok,進入第二集的代碼示範階段,跟着敲一篇,簡單的一批。

Application和Documents接口示範

Applicatioin和Documents是兩個入門級API,前者控制用戶端,後者儲存着所有的文檔對象

from win32com.client import Dispatch # 此乃排程器

client = Dispatch('kwps.Application') 
# 如果要啟動微軟的word用戶端可使用下方辦法
# client = Dispatch('word.Application')
client.Visible = True

# 到這,用戶端已經能啟動了,但尚未打開文檔
# client是一個用戶端對象,即Application對象

# Documents是Application的直接子級API,通過Application直接調用Documents

# 建立一個新文檔并傳回一個Document對象
d1 = client.Documents.Add() # 有預設參數,正常建立無需傳參
# 打開一個文檔并傳回一個Document對象
d2 = client.Documents.Open(
  FileName=file_name,
)

# Open方法的參數多達15個,第一個參數是需要打開的文檔路徑,必填參數,檔案不存在時抛出異常
# 如果文檔要密碼才能打開則使用需要将密碼傳給Open,如下
d2 = client.Documents.Open(
  FileName=file_path,  # 檔案路徑  
  ConfirmConversions=True, # 檔案不是word格式時是否會彈窗要求強制轉換格式
  ReadOnly=False, # 是否以隻讀方式打開
  AddToRecentFiles=True, # 是否将檔案添加到“檔案”->"最近使用"中
  PasswordDocument='密碼' # 所需要的密碼
)
# 注:Open還可以使用位置參數傳參,其各個參數的位置要嚴格按照文檔參數的位置來設定
           

此時,我們是不是已經有了兩個文檔對象了?一個Add方法所建立的d1,一個是Open方法所傳回的d2。要想單獨操作某個文檔,就直接使用變量d1或d2去調用Document接口中的方法和屬性就OK了。

第一課的内容非常簡單,其重點并非是Application和Documents如何使用,而是要建立起一個"使用者思維",即再複雜的程式設計,最後都是給使用者使用的,我們站在使用者的角度的感受,該如何去操作一個文檔:打開文檔、操作文檔,上方的變量中,d1和d2都是要操作的對象,圍繞Document這個對象,再去調用各種各樣的接口來實作需求。

下節課起,我們開始開始重點介紹Document的屬性和方法啦!