關(guān)于python的xlwings與VBA間的互相調(diào)用
一、知識(shí)儲(chǔ)備
xlwings是一款python操作Excel的庫。可以通過python結(jié)合如Pandas,Numpy、等數(shù)據(jù)分析庫,使得數(shù)據(jù)統(tǒng)計(jì)或者數(shù)據(jù)分析更為方便。其最主要的優(yōu)點(diǎn)就是可以與Excel自帶的VBA語言進(jìn)行交互使用。
語法部分可參考之前的筆記:使用Python的xlwings操作Excel的屬性和方法
本次內(nèi)容主要針對(duì)VBA與python之間的交互
二、VBA程序調(diào)用Python代碼
準(zhǔn)備工作
需要先將xlwings操作工具欄嵌入到Excel中去

(1)首先需要知道xlwings包的安裝位置,不知道的話可以通過查看 xlwings任意函數(shù)的__code__獲取函數(shù)的所在路徑來找到安裝位置。
import xlwings as xw
app=xw.App(visible=True,add_book=False)#新建工作簿
app.display_alerts=False#關(guān)閉用戶提示
app.screen_updating=False#關(guān)閉屏幕刷新
FilePath=r'example.xlsx'#文件路徑
wb=app.books.open(FilePath)#打開Excel文檔
wb.save('example.xlsx')#另存為
wb.close()#關(guān)閉工作簿
app.quit()#退出Excel
print(wb.save.__code__)
例如這邊的位置在"C:\ProgramData\Anaconda3\envs\Data\lib\site-packages\xlwings"的位置
(2)進(jìn)入addin文件夾,找到xlwings.xlam文檔,雙擊打開(前提是已經(jīng)裝好了Excel VBA)


之后Excel界面便會(huì)增加xlwings工具需要Powershell Prompt上輸入xlwings addin install指令

需要在Excel上永久出現(xiàn)xlwings插件需要在xlwings addin install

(3)需要先勾選RunPython:Use UDF Server,左邊的interpreter需要填入Python.exe的路徑,PYTHONPATH填入所調(diào)用python腳本文件的路徑(不包括文檔名)如D:\Python\code,UDF Modules填入文檔名,如Test.py注意為.py后綴文件。
當(dāng)然也可以在在PYTHONPATH填入完整路徑如D:\Python\code\Test.py,UDF Modules不填入內(nèi)容。
注意:Python.exe的路徑是指所安裝xlwings庫所在的Python.exe路徑,路徑下需要存有xlwings的.dll檔

(4)在test.py文件中輸入代碼:
import xlwings as xw
def my_macro():
wb = xw.Book.caller()#另VBA反選調(diào)用Python函數(shù)
wb.sheets[0].range('A1').value = 'hello xlwings'(5)在VBA中添加引用,勾選xlwings

(6)在VBA文件中寫入
Option Explicit
Sub demo()
RunPython ("from caller import my_macro;my_macro()")
End Sub(7)運(yùn)行VBA代碼


完成VBA調(diào)用python代碼
(8)或是在Powershell Prompt的界面,輸入xlwings quickstart filename(filename為文件名),即可在路徑下生成一個(gè)文件夾,包含一個(gè).py文件和一個(gè).xlsm文件


內(nèi)部python代碼為
import xlwings as xw
def main():
wb = xw.Book.caller()
sheet = wb.sheets[0]
if sheet["A1"].value == "Hello xlwings!":
sheet["A1"].value = "Bye xlwings!"
else:
sheet["A1"].value = "Hello xlwings!"
@xw.func
def hello(name):
return f"Hello {name}!"
if __name__ == "__main__":
xw.Book("filename.xlsm").set_mock_caller()
main()VBA代碼為
Sub SampleCall()
mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
RunPython "import " & mymodule & ";" & mymodule & ".main()"
End Sub同樣可以完成VBA調(diào)用python程序

三、python xlwings調(diào)用VBA模塊
(1)python xlwings調(diào)用VBA則簡(jiǎn)單很多,只需找到.xlsm文件,使用macro函數(shù)進(jìn)行調(diào)用即可,如下面例子
python代碼:
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.open(r'example3.xlsm')
wbobject=app.books("example3.xlsm")
marco1=wbobject.macro("模塊1.宏1")
marco1()VBA代碼
Option Explicit
Sub 宏1()
With ThisWorkbook.Worksheets(1)
.Cells(1, 1).Value = "實(shí)驗(yàn)!"
End With
End Sub

既可完成調(diào)用。
到此這篇關(guān)于關(guān)于python的xlwings與VBA間的互相調(diào)用的文章就介紹到這了,更多相關(guān)xlwings與VBA調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)感知機(jī)(PLA)算法
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)感知機(jī)(PLA)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
python2.7安裝opencv-python很慢且總是失敗問題
這篇文章主要介紹了python2.7安裝opencv-python很慢且總是失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
python中利用Future對(duì)象異步返回結(jié)果示例代碼
future是一種對(duì)象,表示異步執(zhí)行的操作。下面這篇文章主要給大家介紹了關(guān)于python中利用Future對(duì)象異步返回結(jié)果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09
Python實(shí)現(xiàn)一元一次與一元二次方程求解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)一元一次與一元二次方程的求解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
Python自動(dòng)化高效實(shí)現(xiàn)Word文檔的動(dòng)態(tài)創(chuàng)建與管理
在日常工作中,Word文檔處理占據(jù)了我們大量時(shí)間,ord文檔的動(dòng)態(tài)創(chuàng)建與管理,讓文檔自動(dòng)化成為您的得力助手,本文將深入探討如何利用一個(gè)高效的Python庫,實(shí)現(xiàn)Word文檔的動(dòng)態(tài)創(chuàng)建與管理,感興趣的小伙伴可以了解下2025-09-09
Python多線程采集二手房源數(shù)據(jù)信息流程詳解
這篇文章主要介紹了Python多線程采集二手房源數(shù)據(jù)信息流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05

