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

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

相关推荐
_.Switch几秒前
Python机器学习:自然语言处理、计算机视觉与强化学习
python·机器学习·计算机视觉·自然语言处理·架构·tensorflow·scikit-learn
JUNAI_Strive_ving13 分钟前
番茄小说逆向爬取
javascript·python
彤银浦14 分钟前
python学习记录7
python·学习
简单.is.good35 分钟前
【测试】接口测试与接口自动化
开发语言·python
Envyᥫᩣ1 小时前
Python中的自然语言处理:从基础到高级
python·自然语言处理·easyui
哪 吒1 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
hakesashou1 小时前
python全栈开发是什么?
python
创作小达人1 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
ZPC82102 小时前
Python使用matplotlib绘制图形大全(曲线图、条形图、饼图等)
开发语言·python·matplotlib