本課程《win32com操作word API精講&專案實戰》以視訊為主,文字教學為輔,公眾號ID:一燈程式設計。
win32com的底層呼叫的是word的介面,理論上,想檢視win32com的介面情況,只需要看微軟官方的檔案即可。檔案地址: https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.application?view=word-pia
微軟word介面檔案的組織形式說不上有什麼問題,但其介面規模巨大(接近900個,每個介面中少則十幾個,多則幾百個的屬性和方法)的介面及錯綜綜複雜的介面交叉參照足以將一部分入門者拒之門外,著實繁雜。往往看到一個介面即便有詳細的說明,就是無法知曉如何使用,各種嘗試也不得要領,往往最常見的問題是:到底誰來呼叫這個介面。
第一點 回憶一下,我們是如何操作一個檔案的
瞧,其實就那麼簡單,別看檔案寫得烏泱烏泱的,從檔案操作的角度去思考,其實這個事並沒有那麼複雜。現在只需要記住:
現在再回過來對照,使用者端開啟了,檔案也有了,那使用什麼方法來選中資源呢?介面中有Selection和Range可以實現選中檔案的資源,官方推薦在檔案級程式設計中,優先使用Range介面。 這不來了嘛,就是用Range介面來選中資源。那麼誰才有這個資格來呼叫Range介面呢?答案是:Document,也就是檔案物件,所以上面提到,建立檔案或儲存檔案需要使用變數來接受,就是為了方便後續的操作。
第二點 字型、字號、行間距、頁面設定等等這些如何實現呢
先將word的資源分類:
上方兩點分類,通通都能通過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
的屬性和方法啦!
有疑問,可私信也可評論區交流哈。