关于python的xlwings与VBA间的互相调用

 更新时间:2023年07月06日 11:19:43   作者:西伯利亚的长颈鹿  
这篇文章主要介绍了关于python的xlwings与VBA间的互相调用,VBA是一种通用应用软件脚本语言,Excel包含和许多功能强大的数据分析对象,例如工作表、图表、数据透视表以及大量的数学、财务、工程和通用业务函数,配合VBA可以运用这些对象开发出自动程序

一、知识储备

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

语法部分可参考之前的笔记:使用Python的xlwings操作Excel的属性和方法

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

二、VBA程序调用Python代码

准备工作

需要先将xlwings操作工具栏嵌入到Excel中去

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

import xlwings as xw
app=xw.App(visible=True,add_book=False)#新建工作簿
app.display_alerts=False#关闭用户提示
app.screen_updating=False#关闭屏幕刷新
FilePath=r'example.xlsx'#文件路径
wb=app.books.open(FilePath)#打开Excel文档
wb.save('example.xlsx')#另存为
wb.close()#关闭工作簿
app.quit()#退出Excel
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文件中输入代码:

import xlwings as xw
def my_macro():
    wb = xw.Book.caller()#另VBA反选调用Python函数
    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)运行VBA代码

完成VBA调用python代码

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

 内部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调用python程序

三、python xlwings调用VBA模块

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

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 = "实验!"
    End With
End Sub
 

既可完成调用。 

到此这篇关于关于python的xlwings与VBA间的互相调用的文章就介绍到这了,更多相关xlwings与VBA调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python Web版语音合成实例详解

    Python Web版语音合成实例详解

    这篇文章主要介绍了Python Web版语音合成实例详解,语音合成技术能将用户输入的文字,转换成流畅自然的语音输出,并且可以支持语速、音调、音量设置,让人机沟通更自然,需要的朋友可以参考下
    2019-07-07
  • python字符串切割:str.split()与re.split()的对比分析

    python字符串切割:str.split()与re.split()的对比分析

    今天小编就为大家分享一篇python字符串切割:str.split()与re.split()的对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 对python中的控制条件、循环和跳出详解

    对python中的控制条件、循环和跳出详解

    今天小编就为大家分享一篇对python中的控制条件、循环和跳出详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python 中的Sympy详细使用

    Python 中的Sympy详细使用

    这篇文章主要介绍了Python 中的Sympy详细使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Mac中安装anaconda并配置虚拟环境的详细过程

    Mac中安装anaconda并配置虚拟环境的详细过程

    这篇文章主要给大家介绍了关于Mac中安装anaconda并配置虚拟环境的详细过程,anaconda是包管理器和环境管理器,使用它可以方便地创作,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 浅谈python类属性的访问、设置和删除方法

    浅谈python类属性的访问、设置和删除方法

    下面小编就为大家带来一篇浅谈python类属性的访问、设置和删除方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • python图片格式转换脚本

    python图片格式转换脚本

    大家好,本篇文章主要讲的是python图片格式转换脚本,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • Python学习之迭代器详解

    Python学习之迭代器详解

    这篇文章主要介绍了Python中的一个新的概念,那就是迭代器 。迭代器的使用可以帮助我们提升代码的性能,接下来让我们深入了解一下迭代器吧
    2022-04-04
  • 圣诞节教你用Python绘制爱心圣诞树

    圣诞节教你用Python绘制爱心圣诞树

    圣诞节快要到了,心血来潮,写段代码给大家介绍下基于Python绘制爱心圣诞树的方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-12-12
  • OpenCV-Python实现凸包的获取

    OpenCV-Python实现凸包的获取

    凸包是一个计算几何中的概念,在图像处理过程中,我们常常需要寻找图像中包围某个物体的凸包,本文就使用OpenCV实现,感兴趣的可以了解一下
    2021-06-06

最新评论