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() 函数格式来实现。

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

相关推荐
飞翔的佩奇1 小时前
【完整源码+数据集+部署教程】表盘指针检测系统源码和数据集:改进yolo11-CA-HSFPN
python·yolo·计算机视觉·数据集·yolo11·表盘指针检测
larance2 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
搏博2 小时前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词
lxmyzzs4 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
萧鼎4 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
yujkss5 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx9910135 小时前
小程序开发APP
开发语言·人工智能·python·yolo
飞翔的佩奇6 小时前
【完整源码+数据集+部署教程】二维码与查找模式检测系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·二维码与查找模式检测
大霞上仙6 小时前
实现自学习系统,输入excel文件,能学习后进行相应回答
python·学习·excel
Caven776 小时前
【pytorch】reshape的使用
pytorch·python