乐趣区

关于excel:再见-VBA神器工具统一-Excel-和-Python

大家好,我是东哥。

常常给大家举荐好用的数据分析工具,也收到了铁子们的各种好评。这次也不例外,我要再举荐一个,而且是个爆款神器。

ExcelJupyter Notebok 都是我每天必用的工具,而且两个工具常常协同工作,始终以来工作效率也还算不错。但说切实,毕竟是两个工具,应用的时候必定会有一些切换的老本。

最近,在逛 GitHub 忽然发现了一款神器「PyXLL-Jupyter」,它能够完满将 Jupyter Notebook 嵌入到 Excel 中!
是的,你没听错,应用它咱们就可在 Excel 中运行Jupyter Notebook,调用 Python 函数,实现数据共享。

一、装置

首先,想要在 Excel 中运行 Python 代码,须要装置 PyXLL 插件。PyXLL能够将 Python 集成到 Excel 中,用 Python 代替VBA

先用 pip 装置 PyXLL

pip install pyxll

而后再用 PyXLL 独特的命令行工具装置 Excel 插件。

>> pyxll install

装置好了 PyXLL 在 Excel 中的插件,下一步就是装置 pyxll-jupyter 软件包了。应用 pip 装置 pyxll-jupyter 软件包:

pip install pyxll-jupyter

装置结束后,启动 Excel,将在 PyXLL 选项卡中看到一个新的 Jupyter 按钮。

单击此按钮可在 Excel 工作簿的侧面板中关上 Jupyter Notebook。该面板是 Excel 界面的一部分,能够通过拖放操作勾销停泊或停靠在其余地位。

在 Jupyter 面板中,你能够抉择一个现有的 Notebook 或创立一个新的 Notebook。创立一个新的 Notebook,抉择新建按钮,而后抉择Python 3

二、应用办法

这样做有什么用途呢?

1、Excel 和 Python 共享数据

比方,咱们要 将数据从 Excel 导入 Python。

因为 Excel 和 Python 曾经在同一过程中运行了,所以在 Python 中拜访 Excel 数据以及在 Python 和 Excel 之间切换十分快。

更牛 X 的是,pyxll-jupyter还独自附带了一些 IPython 魔法函数,输出后一键即可实现同步。

%xl_get

将 Python 中的数据移到 Excel,也是同理,非常简单。

无论是应用 Python 先加载数据集,再传输到 Excel,还是其它模式,从 Python 复制数据到 Excel 非常容易。

%xl_set

当然,%xl_get%xl_set 都附带参数选项能够自定义导入导出规则。

2. 在 Excel 中应用 Python 绘图

PyXLL的另一大用处就是它集成了简直所有支流的可视化包,因而咱们能够在 Excel 中利用这些可视化包随便绘图,包含 matplotlibplotlybokehaltair等。

%xl_plot

同样,应用魔法函数 %xl_plot 在 Excel 中能够绘制任何的 Python 图。任何一个受反对的可视化包也可进行绘图而后传递图形对象到 Excel 中,比方上图中应用 pandas 的绘图成果就很好。

%xl_plot df.plot(kind='scatter')

3. 从 Excel 调用 Python 函数

应用 Excel 离不开函数,而当咱们须要一些简单性能时,自带函数未必能满足咱们的需要。

通过 PyXLL,咱们能够间接在Excel 中调用 Python 函数,并对其进行实时测试。这就防止了 Excel 和 Jupyter 之间的来回切换老本,有点像 dataframe 的 apply 用法,写个函数间接与 Excel 完满交融。

函数写好后,还可将其增加到 PyXLL Python 我的项目中。这样当前每次都能够复用实现雷同性能,几乎不要太香!

from pyxll import xl_func

@xl_func
def test_func(a, b, c):
    return (a * b) + c

比方,输出以上代码在 Jupyter 中运行后,Python 函数将立刻可被 Excel 工作簿调用。

不只是简略的函数,还能够将整个数据作为 pandasDataFrames传给函数,并返回任何的 Python 类型,比方 numpy arrayDataFrames,甚至还能够通过给@xl_func 装璜器一个签名字符串来通知 PyXLL 输入什么类型。例如,以下函数:

from pyxll import xl_func

# 装璜器签名通知 PyXLL 如何转换函数参数和返回的值
@xl_func("dataframe df: dataframe<index=True>", auto_resize=True)
def df_describe(df):
    # df 是一个从数据集里创立的 pandas DataFrame 传递给函数
    desc = df.describe()
    # desc 是新的 DataFrame(PyXLL 转换为一组值并返回给 Excel 所创立的)return desc

当初能够编写简单的 Python 函数来进行数据转换和剖析,然而能够协调在 Excel 中如何调用或排序这些函数。更改输出会导致调用函数,并且计算出的输入会实时更新,这与咱们冀望的一样。

4. 代替 VBA

VBA 脚本所需的性能函数,在 Python 中均有雷同的 API。这对于相熟 Python 但不相熟 VBA 的同学相对是个好消息。

官网还给出了和 VBA 性能一样的 API 阐明文档。

https://www.pyxll.com/docs/us…

Jupyter Notebook在 Excel 中运行,整个 Excel 对象都可用,所有操作就像在 VBA 编辑器中编写 Excel 脚本截然不同。

因为 PyXLL 在 Excel 过程内运行 Python,因而从 Python 调用 Excel 不会对性能造成任何影响。当然,也能够从内部 Python 过程调用 Excel,但这通常要慢很多。在 Excel 中运行Jupyter Notebook,所有变得就不一样了!

应用 PyXLLxl_app函数获取 Excel.Application 对象,该对象等效于 VBA 中的 Application 对象。弄清楚如何应用 Excel 对象模型进行操作的一种好办法是记录 VBA 宏,而后将该宏转换为Python

下图中尝试将以后抉择单元格更改色彩。

三、总结

PyXLL将完满交融 PythonExcel,实现了以下性能,为表格数据处理晋升一个全新的高度。

  • Excel 和 Python 共享数据
  • 在 Excel 中应用 Python 绘图
  • 从 Excel 调用 Python 函数
  • 代替 VBA 脚本

不得不说这个工具是真的香,青睐 Python 的同学能够不必学习 VBA 了,Python 脚本打天下。


原创不易,感觉不错点个赞。

另外,欢送关注我的原创公众号:Python 数据迷信

数据迷信学习网站:datadeepin

退出移动版