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

人工智能29

目录

一、知识储备

二、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中去

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

(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__)

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

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

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

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

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

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

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

Python xlwings操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用 (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档

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

(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

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

(6)在VBA文件中写入

Option Explicit
Sub demo()

    RunPython ("from caller import my_macro;my_macro()")

End Sub

(7)运行VBA代码

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

完成VBA调用python代码

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

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

内部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操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用

三、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操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用

既可完成调用。

Original: https://blog.csdn.net/m0_59160272/article/details/125948932
Author: 西伯利亚的长颈鹿
Title: Python xlwings操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用

相关文章
植物大战 模板——C++ 人工智能

植物大战 模板——C++

"" 猛戳订阅🍁🍁 👉 [C++详解专栏] 👈 🍁🍁 这里是目录 一、泛型编程 二、函数模板 * 1.函数模板的实例化 三、类模板 * 1.类模板的定义格式 四、非类型模板参数 五、模板的特化 * 1...
语音识别技术论文阅读笔记 人工智能

语音识别技术论文阅读笔记

2021.03.24 论文:语音识别技术人工智能毕业论文(作者:) 笔记: 1.语音识别技术应用领域:声控电话交换、信息网络查询、家庭服务、医疗服务、银行服务、工业控制、语音助手、语音通信系统等。 2...
电商数据分析案例 与 职责要求 人工智能

电商数据分析案例 与 职责要求

一、数据分析的流程。数据分析的流程主要分为六步骤, 遵循这种方法,一个完整的数据分析项目就出来了。 (1)明确分析目的:我们接到一个分析任务,首先要弄清楚我们分析的对象是什么,要达成怎样的目的,不能陷...
工业视觉检测厂家十大排名 人工智能

工业视觉检测厂家十大排名

我们今天先不从视觉检测解决方案的角度出发,而是从ccd视觉检测产品的角度来评选出机器视觉龙头企业。众所周知,整个视觉系统我们所用到的软硬件产品有:光源、镜头、工业相机、视觉软件等,那么在这些领域哪些公...
YY0709|听觉报警信号要求及测试方法 人工智能

YY0709|听觉报警信号要求及测试方法

上一篇我们介绍了视觉报警信号的要求,今天主要来介绍一下听觉报警信号的要求。 查阅《YY0709-2009 医用电气设备 第1-8部分:安全通用要求 并列标准》,我们可以看到:视觉报警信号的要求主要集中...