亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于python的xlwings與VBA間的互相調(diào)用

 更新時(shí)間:2023年07月06日 11:19:43   作者:西伯利亞的長(zhǎng)頸鹿  
這篇文章主要介紹了關(guān)于python的xlwings與VBA間的互相調(diào)用,VBA是一種通用應(yīng)用軟件腳本語(yǔ)言,Excel包含和許多功能強(qiáng)大的數(shù)據(jù)分析對(duì)象,例如工作表、圖表、數(shù)據(jù)透視表以及大量的數(shù)學(xué)、財(cái)務(wù)、工程和通用業(yè)務(wù)函數(shù),配合VBA可以運(yùn)用這些對(duì)象開(kāi)發(fā)出自動(dòng)程序

一、知識(shí)儲(chǔ)備

xlwings是一款python操作Excel的庫(kù)??梢酝ㄟ^(guò)python結(jié)合如Pandas,Numpy、等數(shù)據(jù)分析庫(kù),使得數(shù)據(jù)統(tǒng)計(jì)或者數(shù)據(jù)分析更為方便。其最主要的優(yōu)點(diǎn)就是可以與Excel自帶的VBA語(yǔ)言進(jìn)行交互使用。

語(yǔ)法部分可參考之前的筆記:使用Python的xlwings操作Excel的屬性和方法

本次內(nèi)容主要針對(duì)VBA與python之間的交互

二、VBA程序調(diào)用Python代碼

準(zhǔn)備工作

需要先將xlwings操作工具欄嵌入到Excel中去

(1)首先需要知道xlwings包的安裝位置,不知道的話可以通過(guò)查看 xlwings任意函數(shù)的__code__獲取函數(shù)的所在路徑來(lái)找到安裝位置。

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)#打開(kāi)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文檔,雙擊打開(kāi)(前提是已經(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庫(kù)所在的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)Const詳解

    Python實(shí)現(xiàn)Const詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)Const的方法的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • Jupyter notebook 遠(yuǎn)程配置及SSL加密教程

    Jupyter notebook 遠(yuǎn)程配置及SSL加密教程

    這篇文章主要介紹了Jupyter notebook 遠(yuǎn)程配置及SSL加密教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Java與Python兩大幸存者誰(shuí)更勝一籌呢

    Java與Python兩大幸存者誰(shuí)更勝一籌呢

    Python起源于一種腳本語(yǔ)言,它的語(yǔ)法體現(xiàn)了一種可讀性的理念,具有簡(jiǎn)單而規(guī)則的界限,鼓勵(lì)簡(jiǎn)潔和一致的代碼布局,而Java是一種面向?qū)ο笳Z(yǔ)言,其吸引力和價(jià)值所在是其具有的可移植性和相對(duì)效率。下面通過(guò)本文了解下java python 誰(shuí)更勝一籌
    2018-04-04
  • python3實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程

    python3實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)SMTP發(fā)送郵件的詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹

    對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹

    今天小編就為大家分享一篇對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python迭代器,生成器詳解

    python迭代器,生成器詳解

    這篇文章主要介紹了Python中的迭代器和生成器,涉及到Python中很多重要的特性,小編覺(jué)得這篇文章寫的還不錯(cuò),需要的朋友可以參考下
    2021-10-10
  • tensorflow模型的save與restore,及checkpoint中讀取變量方式

    tensorflow模型的save與restore,及checkpoint中讀取變量方式

    這篇文章主要介紹了tensorflow模型的save與restore,及checkpoint中讀取變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python+Jmeter實(shí)現(xiàn)自動(dòng)化性能壓測(cè)的流程步驟

    Python+Jmeter實(shí)現(xiàn)自動(dòng)化性能壓測(cè)的流程步驟

    性能測(cè)試是一個(gè)全棧工程師/架構(gòu)師必會(huì)的技能之一,只有學(xué)會(huì)性能測(cè)試,才能根據(jù)得到的測(cè)試報(bào)告進(jìn)行分析,找到系統(tǒng)性能的瓶頸所在,而這也是優(yōu)化架構(gòu)設(shè)計(jì)中重要的依據(jù),本文給大家介紹了Python+Jmeter實(shí)現(xiàn)自動(dòng)化性能壓測(cè)的流程步驟,需要的朋友可以參考下
    2024-05-05
  • Python編程基礎(chǔ)之輸入與輸出

    Python編程基礎(chǔ)之輸入與輸出

    這篇文章主要為大家介紹了Python輸入與輸出,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解

    基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解

    這篇文章主要介紹了基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論