Excel: Python 如何干掉 VBA 系列 乙

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」mp.weixin.qq.com/s/k2XtfXS3G...

创建工作表格

创建表格

xlwings 就可以协助创建插入了宏的 excel 表格。

先找到一个心满意足的目录,一般我们称之为工作目录,比如我选择在 D 盘根目录,打开文件管理器,点击路径栏空白部分,然后输入 cmd 并回车

输入回车后,系统会自动弹出命令行终端,并且自动把命令行终端的当前路径设置到上面的工作目录中

在里边输入

复制代码
xlwings quickstart fishfeed

上面的指令会在当前目录下创建文件夹 fishfeed,并在文件夹内创建两个文件

fishfeed.py

fishfeed.xlsm

文件 fishfeed.xlsm 是 xlwings 自动插入了宏的表格,我们后边就在这个表格里插入和调用自定义 python 函数。

文件 fishfeed.py 是 python 脚本文件,里边已经创建了 xlwings 的应用示例,包含有一个简单的 hello 示例函数,文件内容如下

ini 复制代码
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("fishfeed.xlsm").set_mock_caller()
    main()

Excel 工作簿和 python 脚本的交互

从文件 fishfeed.py 的代码内容来看

xw.Book("fishfeed.xlsm").set_mock_caller()

这行代码会将表格文件 fishfeed.xlsm 和本脚本代码建立关联。当执行

xw.Book.caller()

时,返回的就是 fishfeed.xlsm 表格代表的工作簿,存放在变量 wb。

css 复制代码
wb.sheets[0]

通过 xlwings 工作簿的 sheets 成员获取工作表,后边的 \[\] 内的数值代表工作表序号,序号从 0 开始(0,1,2,3...)。

获取到工作表后,通过工作表的操作符 \[\] 可以指定访问和读写的单元格内容

ini 复制代码
sheet["A1"].value = "Bye xlwings!"

上面这行代码表示将字符串 Bye xlwings! 内容写入工作表 sheet 的 A1 单元。

接下来看看运行效果,双击打开 excel 文件 fishfeed.xlsm,点击工具栏的 xlwings,然后直接点击最左边的执行按钮 Run main

在上面的效果里,当执行 Run main 时,xlwings 自动直接执行了一遍 python 脚本文件,但 python 脚本文件中还有其它的自定义函数未被使用,下面来看看怎么插入 python 脚本文件提供的自定义函数。

excel 调用自定义 python 函数

脚本文件 fishfeed.py 里还实现了一个函数 hello()

python 复制代码
@xw.func
def hello(name):
    return f"Hello {name}!"

hello() 函数的用途是将输入的参数简单拼接在字符串 hello 之后,然后返回拼接后的结果。

在 excel 单元格里插入 python 自定义函数与其它 excel 自带函数是一样的书写格式,但插入的时候有一点需要注意,先看看效果

注意:在任何单元格里插入自定义函数之前都必须先选中该单元格,然后点击工具栏里的按钮 Import Functions。如果你发现插入的自定义 python 函数没有发生作用,可以尝试点击一下工具栏里的按钮 Import Functions

至于其它的自定义功能的函数实现完全可以照着 hello() 函数格式来实现。

未完待续,下期更精彩。。。

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰9 小时前
[爬虫]-Urllib
爬虫·python
玉鸯10 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_4462608511 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao11 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
qetfw12 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
用户83562907805112 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
一次旅行13 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化