xlwings:操作Excel,通過巨集呼叫Pyhton(VBA調Python)
xlwings - 讓Excel飛起來
說明:我的xlwings版本是0.11.5。老一點的版本可能需要經過額外的設定,其excel外掛才能用。
xlwings是一個python的庫,支援從Excel呼叫Python,也支援通過Python去操作Excel。
官方說明、網上的文章已經有很多了。
這裡總結如何從Excel通過加一個Macro(巨集),點選一個按鈕來呼叫Python,從而實現對Excel的操作。
需求:通過點選Excel中的一個按鈕,通過VBA呼叫Python程式碼,實現對Excel的操作。
我的環境:Win 10 64位,Excel 2016, Python 3.6(我安裝的是Anaconda 3,64 位,有pip工具)
案例:點選一個按鈕,單元格A1中出現Hello,world!
效果圖
基本流程
假設我的py程式碼都寫好了(後面當然要用)
# -*- coding: utf-8 -*-
import xlwings as xw
def say_hi():
wb = xw.Book.caller()
sht = wb.sheets[0]
sht.range('A1').value = 'Hello, world'
1. Excel,開啟對巨集(macro)的支援。
2. Excel,顯示開發工具選項卡。
3. Excel,儲存為啟用巨集的工作簿。
4. 安裝xlwings,並測試安裝成功。
5. Excel,顯示xlwings選項卡,這樣才可以在Excel中通過VBA執行py和使用者自定義函式(UDF)。
6. 配置python編譯器路徑,以及執行的py檔案路徑
7. 在VBA中,寫一個巨集(執行py檔案的say_hi函式)。插入按鈕,並繫結該巨集
1. 開啟巨集支援
Excel 檔案 - 選項 - 信任中心 - 巨集設定 - 啟用所有巨集
2. 顯示“開發工具”選項卡
Excel選項 - 自定義功能區 - 開發工具(勾選)
至此,出現了開發工具的選項卡。
3. 儲存為啟用巨集的工作簿 (*.xlsm)
4. 安裝xlwings,並測試安裝成功
5. 讓Excel顯示xlwings選項卡
Excel - 開發工具 - 檢視程式碼,開啟 VBA
工具 - 引用,勾選xlwings
注意:你會發現,根本就沒有xlwings這個選項。
找到xlwings的addin資料夾,開啟xlwings.xlam檔案,自然就出現了xlwings選項卡了。
此時再勾選xlwings。
勾選RunPython: Use UDF Server
這樣一旦執行py的話,會啟一個黑視窗,此後執行py速度要比不勾選快
應該是不需要每次執行的時候都載入py檔案了
但是這樣的話,修改了py檔案,需要把黑視窗關掉,重新匯入
其實感覺就相當於是Debug模式還是Release模式
再到VBA中對勾選xlwings的支援。
6. 配置編譯器路徑,需要執行的py檔案路徑
interpreter:編譯器,找到python.exe(我的是anaconda 3, 一步到位)
PYTHONPATH:py檔案路徑
7. 寫巨集,插入按鈕,繫結巨集
Sub hi()
RunPython ("from xw import say_hi; say_hi()")
End Sub
開發工具 - 插入 - 表單控制元件(按鈕)
編輯文字,指定巨集
最後,點選按鈕,Done!