树袋熊|打破Excel与Python的隔阂,xlwings最佳实践( 二 )


这通过动态数组公式完成这个任务 。 首先打开 myproject.py 文件 , 自定义一个函数:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践

  • 行1 , 2:导入需要的库
  • 行6-11:加载数据的自定义函数 , 其中的逻辑非常简单 , 使用 pandas 加载数据 , 返回结果即可
  • 行4:@xw.func,xlwings 的装饰器 , 标记此函数是一个公式 , 这会让函数成为 Excel 中的函数公式
  • 行5:@xw.ret(expand='table'),xlwings 的装饰器,"ret" 应该是 "return" 的意思, 它是函数返回值相关的设置 。 这里参数 expand='table', 这会让公式变成一个自动扩展范围的动态数组公式(结果是一个表 , 行列数都是动态的)
Python 的代码已经有了 , 但是 Excel 是不可能直接识别你定义的函数 。
幸运的是 , Excel 可以识别 vba 定义的函数 。 因此 , 我们需要 xlwings 帮我们自动生成 vba 代码 。
打开 Excel 文件 myproject.xlsm(注意要启动宏):
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践
  • 在 xlwings 页中 , 点击 import Functions 的大按钮 , 意思是"导入 Python 文件中的函数"
此时我们输入函数公式时 , 就能从提示中看到函数:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践按照参数 , 选择对应的单元格引用即可:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践回车后发现返回一段错误信息:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践
  • 显然 , 我们还没有输入文件路径
输入完整的文件路径即可:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践
  • 你会发现公式自动变成了数组公式
如果文章只是简单列出操作步骤 , 那么这是一个不合格的教程 。 你在不懂原理的情况下 , 很多问题都无法自己解决 。
接下来我将讲解其运行机制的直觉理解 。
直觉理解运行机制目前为止 , 我们没有编写一句 vba 代码 , 只是简单定义出一个加载数据的 Python 自定义函数 , 就可以在 Excel 上使用公式实现效果 。
从步骤上来说:
  1. 定义 Python 自定义函数(在文件 myproject.py 中)
  2. 点击"导入函数"的按钮(在 Excel 文件 myproject.xlsm 中)
那么为什么需要点击 "导入函数" 按钮?
如果我修改了 Python 代码 , 需要重新点击这个按钮吗?
首先 , 我们之所以能在 Excel 上输入公式时 , 出现我们的自定义函数 , 是因为在这个 Excel 文件中 , 存在 vba 代码 , 定义了同名的方法:
树袋熊|打破Excel与Python的隔阂,xlwings最佳实践