xlwings--excel多按钮调用python

xlwings中文文档: https://docs.xlwings.org/zh_CN/latest/

环境配置

安装xlwings

pip install "xlwings[all]"

更新xlwings 时,需要保持Python 包的版本和Excel 插件的版本一致。因此在更新
xlwings 时需要执行两条命令:一条用于Python 包,另一条用于Excel 插件。

pip install --upgrade xlwings
xlwings addin install

此时excel中会出现xlwings, 注意安装时须关闭excel。
在这里插入图片描述
如果菜单栏未显示“开发工具”,需要把“开发工具”添加到功能区,因为后面要用到宏。步骤如下,

  1. 在"文件"选项卡上,转到"自定义>选项"。
  2. 在“自定义功能区”和“主选项卡”下,选中“开发工具”复选框。
    在这里插入图片描述在这里插入图片描述

单按钮调用python

在命令行输入以下代码,创建.xlsm和.py两个文件,在.py文件里写python代码,在.xlsm文件里点击执行,即可完成excel与python的交互。

xlwings quickstart ProjectName

ProjectName可以自定义,是创建后文件的名字。
在这里插入图片描述
打开.xlsm文件,这是一个excel宏文件,xlwings已经提前帮你写好了调用Python的VBA代码。
按快捷键Alt + F11,就能调出VBA编辑器。
在这里插入图片描述
上图代码主要执行两个步骤:
1、在.xlsm文件相同位置查找相同名称的.py文件
2、调用.py脚本里的main()函数
创建好的.py里会生成默认代码,具体如下

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("first_project.xlsm").set_mock_caller()
    main()

在.xlsm文件sheet1中创建一个按钮,并设置默认的宏,变成一个触发按钮。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后,在xlwings 插件的最左边点击 按钮,“Hello xlwings!”会被写入第一张工作表
的A1 单元格中。再次点击按钮,单元格内容会变成“Bye xlwings!”
在这里插入图片描述

添加第2、第3个按钮

按钮2在A10打印“I am button2", 按钮3负责清空A10内容
py文件如下,

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!"

def button2():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    sheet["A10"].value = "I am button2"
    
def button3():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    sheet["A10"].value = ""

if __name__ == "__main__":
    xw.Book("first_project.xlsm").set_mock_caller()
    main()
    button3()

快捷键Alt + F11,调出VBA编辑器,修改如下

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

Sub button2()
    mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
    RunPython "import " & mymodule & ";" & mymodule & ".button2()"
End Sub

Sub button3()
    mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
    RunPython "import " & mymodule & ";" & mymodule & ".button3()"
End Sub

在这里插入图片描述

调用其它py文件的函数

在first_projet目录下新建second_project.py函数

import xlwings as xw

def button4():
    wb = xw.Book.caller()
    sheet = wb.sheets[0]
    if sheet["A20"].value == "I am button4":
        sheet["A20"].value = "clear"
    else:
        sheet["A20"].value = "I am button4"
    
if __name__ == "__main__":
    xw.Book("first_project.xlsm").set_mock_caller()
    button4()

快捷键Alt + F11,调出VBA编辑器,修改如下
在这里插入图片描述

调用其他路径下的py文件

如果调用其他文件夹中的py文件,需要将py文件路径添加至
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值