關(guān)于python的xlwings與VBA間的互相調(diào)用
一、知識儲備
xlwings是一款python操作Excel的庫??梢酝ㄟ^python結(jié)合如Pandas,Numpy、等數(shù)據(jù)分析庫,使得數(shù)據(jù)統(tǒng)計或者數(shù)據(jù)分析更為方便。其最主要的優(yōu)點(diǎn)就是可以與Excel自帶的VBA語言進(jìn)行交互使用。
語法部分可參考之前的筆記:使用Python的xlwings操作Excel的屬性和方法
本次內(nèi)容主要針對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界面便會增加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為文件名),即可在路徑下生成一個文件夾,包含一個.py文件和一個.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則簡單很多,只需找到.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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter notebook 遠(yuǎn)程配置及SSL加密教程
這篇文章主要介紹了Jupyter notebook 遠(yuǎn)程配置及SSL加密教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python3實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)SMTP發(fā)送郵件的詳細(xì)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06對python opencv 添加文字 cv2.putText 的各參數(shù)介紹
今天小編就為大家分享一篇對python opencv 添加文字 cv2.putText 的各參數(shù)介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12tensorflow模型的save與restore,及checkpoint中讀取變量方式
這篇文章主要介紹了tensorflow模型的save與restore,及checkpoint中讀取變量方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python+Jmeter實(shí)現(xiàn)自動化性能壓測的流程步驟
性能測試是一個全棧工程師/架構(gòu)師必會的技能之一,只有學(xué)會性能測試,才能根據(jù)得到的測試報告進(jìn)行分析,找到系統(tǒng)性能的瓶頸所在,而這也是優(yōu)化架構(gòu)設(shè)計中重要的依據(jù),本文給大家介紹了Python+Jmeter實(shí)現(xiàn)自動化性能壓測的流程步驟,需要的朋友可以參考下2024-05-05基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解
這篇文章主要介紹了基于Django的樂觀鎖與悲觀鎖解決訂單并發(fā)問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07