1. 程式人生 > >xlwings:操作Excel,通過巨集呼叫Pyhton(VBA調Python)

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!