当前位置:   article > 正文

Python xlwings操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用_xlwings vba

xlwings vba

目录

一、知识储备

二、VBA程序调用Python代码

三、python xlwings调用VBA模块


一、知识储备

xlwings是一款python操作Excel的库。可以通过python结合如Pandas,Numpy、等数据分析库,使得数据统计或者数据分析更为方便。其最主要的优点就是可以与Excel自带的VBA语言进行交互使用。

语法部分可参考之前的笔记:https://blog.csdn.net/m0_59160272/article/details/125780599

本次内容主要针对VBA与python之间的交互

二、VBA程序调用Python代码

1、准备工作,需要先将xlwings操作工具栏嵌入到Excel中去

(1)首先需要知道xlwings包的安装位置,不知道的话可以通过查看 xlwings任意函数的__code__获取函数的所在路径来找到安装位置。

  1. import xlwings as xw
  2. app=xw.App(visible=True,add_book=False)#新建工作簿
  3. app.display_alerts=False#关闭用户提示
  4. app.screen_updating=False#关闭屏幕刷新
  5. FilePath=r'example.xlsx'#文件路径
  6. wb=app.books.open(FilePath)#打开Excel文档
  7. wb.save('example.xlsx')#另存为
  8. wb.close()#关闭工作簿
  9. app.quit()#退出Excel
  10. print(wb.save.__code__)

例如这边的位置在"C:\ProgramData\Anaconda3\envs\Data\lib\site-packages\xlwings"的位置

(2)进入addin文件夹,找到xlwings.xlam文档,双击打开(前提是已经装好了Excel VBA)

 

之后Excel界面便会增加xlwings工具需要Powershell Prompt上输入xlwings addin install指令

需要在Excel上永久出现xlwings插件需要在xlwings addin install

 (3)需要先勾选RunPython:Use UDF Server,左边的interpreter需要填入Python.exe的路径,PYTHONPATH填入所调用python脚本文件的路径(不包括文档名)如D:\Python\code,UDF Modules填入文档名,如Test.py注意为.py后缀文件。

当然也可以在在PYTHONPATH填入完整路径如D:\Python\code\Test.py,UDF Modules不填入内容。

注意:Python.exe的路径是指所安装xlwings库所在的Python.exe路径,路径下需要存有xlwings的.dll档

 

(4)在test.py文件中输入代码:

  1. import xlwings as xw
  2. def my_macro():
  3. wb = xw.Book.caller()#另VBA反选调用Python函数
  4. wb.sheets[0].range('A1').value = 'hello xlwings'

(5)在VBA中添加引用,勾选xlwings

(6)在VBA文件中写入

  1. Option Explicit
  2. Sub demo()
  3. RunPython ("from caller import my_macro;my_macro()")
  4. End Sub

(7)运行VBA代码

完成VBA调用python代码

(8)或是在Powershell Prompt的界面,输入xlwings quickstart filename(filename为文件名),即可在路径下生成一个文件夹,包含一个.py文件和一个.xlsm文件

 

 内部python代码为

  1. import xlwings as xw
  2. def main():
  3. wb = xw.Book.caller()
  4. sheet = wb.sheets[0]
  5. if sheet["A1"].value == "Hello xlwings!":
  6. sheet["A1"].value = "Bye xlwings!"
  7. else:
  8. sheet["A1"].value = "Hello xlwings!"
  9. @xw.func
  10. def hello(name):
  11. return f"Hello {name}!"
  12. if __name__ == "__main__":
  13. xw.Book("filename.xlsm").set_mock_caller()
  14. main()

VBA代码为

  1. Sub SampleCall()
  2. mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
  3. RunPython "import " & mymodule & ";" & mymodule & ".main()"
  4. End Sub

同样可以完成VBA调用python程序

三、python xlwings调用VBA模块

 (1)python xlwings调用VBA则简单很多,只需找到.xlsm文件,使用macro函数进行调用即可,如下面例子

python代码:

  1. import xlwings as xw
  2. app=xw.App(visible=True,add_book=False)
  3. wb=app.books.open(r'example3.xlsm')
  4. wbobject=app.books("example3.xlsm")
  5. marco1=wbobject.macro("模块1.宏1")
  6. marco1()

 VBA代码

  1. Option Explicit
  2. Sub 宏1()
  3. With ThisWorkbook.Worksheets(1)
  4. .Cells(1, 1).Value = "实验!"
  5. End With
  6. End Sub

既可完成调用。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/661958
推荐阅读
相关标签
  

闽ICP备14008679号