python中Pywin32庫的win32com.clien模塊在驅動Excel時有諸多好處:
1、可以決定是否顯式地打開Excel應用,調試的時候所見即所得;
2、可以用近乎一樣的VBA語法,幾乎能實現VBA可以實現的所有功能;
3、它甚至也支持直接調用Excel中已經寫好的宏文件。
那它有什麼缺點呢?我覺得最主要的缺點有兩個:
1、跟xlrd、openpyxl甚至Pandas這些可以處理Excel的庫比起來,執行效率不夠高,用【慢】來形容也不過分;
2、在pycharm、Vscode這些IDE下調試時,它就像一個盲盒一樣,沒有語法及API提示。
事實上,大部分的辦公自動化場景,自動化是第一位,效率是我們後面纔要考慮的。從這個意義上講,上面的第二個缺點是更致命的存在。它導致我們要實現某個不常用的功能時,需要去查閱很多資料,直接影響開發效率。
下面這個問題,不知屏幕前的您是否也遇到:如果某個excel文件含有很多鏈接,我們用win32com.client打開Excel時,會彈窗問我們是否要更新鏈接?這彈窗會直接阻塞後續代碼的執行。
代碼層面我們要做的不是等彈窗出來時自動關閉它(事實上我們後續的代碼已經阻塞了),而是如何在打開Excel時直接告訴Excel更新還是不更新鏈接,這樣Excel就不用彈窗了。
下面是具體思路。使用win32com.client打開Excel並自動更新鏈接,可以通過設置UpdateLinks參數來實現。UpdateLinks參數接受的值有:
- 0 或 False:不更新鏈接。
- 3 或 True:自動更新鏈接,不提示用戶。
以下是一個示例代碼,展示如何使用win32com.client打開一個Excel文件並自動更新鏈接:
請將"你的文件路徑.xlsx"替換爲你實際的文件路徑。這段代碼會打開指定的Excel文件,並在打開時自動更新所有鏈接,不會彈出提示框詢問用戶。