前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

作者头像
deephub
发布于 2020-12-28 03:39:27
发布于 2020-12-28 03:39:27
6.5K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

以前,Excel和Python Jupyter Notebook之间我们只能选择一个。但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用。

在本文中,我将向你展示如何设置在Excel中运行的Jupyter Notebook。在这两者之间共享数据,甚至可以从Excel工作簿调用Jupyter笔记本中编写的Python函数!

开始

首先,要在Excel中运行Python代码,你需要使用PyXLL包。PyXLL使我们可以将Python集成到Excel中,并使用Python代替VBA。要安装PyXLL Excel加载项“ pip install pyxll”,然后使用PyXLL命令行工具安装Excel的加载项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 >> pip install pyxll
 >> pyxll install

安装完PyXLL Excel插件,下一步就是安装PyXLL -jupyter软件包。该软件包提供了PyXLL和Jupyter之间的链接,因此我们可以在Excel内使用Jupyter笔记本。

使用pip安装pyxll-jupyter包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 >> pip install pyxll-jupyter

一旦安装了PyXLL Excel加载项和PyXLL-Jupyter软件包后,启动Excel将在PyXLL选项卡中看到一个新的“ Jupyter”按钮。

单击此按钮可在Excel工作簿的侧面板中打开Jupyter笔记本。该面板是Excel界面的一部分,可以通过拖放操作取消停靠或停靠在其他位置。

在Jupyter面板中,你可以选择一个现有的笔记本或创建一个新的笔记本。要创建一个新的笔记本,请选择“新建”按钮,然后选择“ Python 3”。

如何使用

现在,你已经在Excel中运行了完整的Jupyter笔记本!但是,这有什么好处呢?这比在Excel外部运行笔记本更好?

好了,现在你可以使用Excel处理数据,并使用Python处理相同的数据。将Excel用作用于组织和可视化数据的交互式操作,无缝切换到Python以使用更复杂的功能。

将Jupyter笔记本用作草稿板,以试用Python代码。在Jupyter笔记本上完全用Python编写Excel函数,并进行实时测试。开发完一个有用的可重用函数后,将其添加到PyXLL Python项目中。这样你每次使用Excel时都可以使用相同的函数。

在本文的其余部分,我将向你展示如何:

  • 使用Jupyter笔记本在Excel和Python之间共享数据
  • 在笔记本上写Excel工作表函数(udf)
  • 脚本Excel与Python代替VBA

从Excel获取数据到Python

因为PyXLL在与Excel相同的进程中运行Python,所以用Python访问Excel数据以及在Python和Excel之间快速调用。

为了使事情尽可能简单,pyxll-jupyter包附带了一些IPython“魔法”函数,可以在你的Jupyter笔记本中使用。

% xl_get

excel sheet 与 Pandas DataFrames 同步

使用魔术函数“%xl_get”来获取Python中当前的Excel选择。在Excel中创建数据表, 选择左上角(或整个范围),然后在Jupyter笔记本中输入“%xl_get”,瞧!Excel表现在是pandas DataFrame。

%xl_get魔术函数有几个选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  -c或--cell。传递单元格的地址以获取值,例如%xl_get --cell A1D5-t或--type。指定获取值时要使用的数据类型,例如%xl_get --type numpy_array。
  -x或--no-auto-resize。仅获取选定范围或给定范围的数据。不要扩展到包括周围的数据范围。

PyXLL还有其他与Excel交互以将数据读入Python的方式。“%xl_get”魔术功能只是使事情变得更简单!当Jupyter笔记本在Excel中运行时,所有其他方法(例如,使用XLCell类,Excel的COM API甚至xlwings)仍然可用。

提示:可以为魔术函数的结果分配一个变量!例如,尝试“ df =%xl_get”。

将Python中的数据移回Excel

从Python到Excel的另一种传输方式也可以正常工作。无论你是使用Python加载数据集并将其传输到Excel工作簿,还是通过Excel处理数据集并希望将结果返回Excel,从Python复制数据到Excel都很容易。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 %xl_set

魔术函数“%xl_set”获取一个Python对象并将其写入Excel。在Excel中是否有想要的数据框“ df”?只需使用“%xl_set df”,它将被写入Excel中的当前选择。

与%xl_get一样,%xl_set也具有一系列选项来控制其行为。你甚至可以使用PyXLL的单元格格式设置功能在将结果写入Excel的同时自动应用格式设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 -c或--cell。将值写入的单元格地址,例如%xl_set VALUE --cell A1-t或--type。将值写入Excel时要使用的数据类型说明符,例如%xl_set VALUE --type dataframe <index = False>-f或--formatter。PyXLL单元格格式化程序对象,例如%xl_set VALUE --formatter DataFrameFormatter()。请参阅单元格格式。
 -x或--no-auto-resize。不要自动调整范围大小以适合数据。仅将值写入当前选择或指定范围。

与%xl_get一样,%xl_set只是一个快捷方式,你可能已与PyXLL一起使用的所有其他写回Excel的方式仍然可以在Jupyter笔记本中使用。

在Excel中使用Python图(matplotlib / plotly等)

关于数据处理的一大优点是可用的功能强大的绘图程序包。例如df.plot()

PyXLL集成了所有主要的绘图库,因此你也可以在Excel中充分利用它们。这包括matplotlib(由pandas使用),plotly,bokeh和altair。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 %xl_plot

使用“%xl_plot”在Excel中绘制任何Python图表。从一个受支持的绘图库中向其传递任何图形对象,或使用最后一个pyplot图形。使用pandas plot的效果也很好,例如。%xl_plot df.plot(kind='scatter').

%xl_plot魔术函数具有一些选项来控制其工作方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  -n或--name。Excel中图片对象的名称。如果使用已经存在的图片名称,则该图片将被替换。
  -c或--cell。用作新图片位置的单元格地址。如果图片已经存在,则无效。
  -w或--width。Excel中图片的宽度(以磅为单位)。如果更新现有图片,则无效。
  -h或--height。Excel中图片的高度(以磅为单位)。如果更新现有图片,则无效。

%xl_plot是pyxll.plot函数的快捷方式。

从Excel调用Python函数

你可以直接从Excel工作簿中调用Python函数,而不是在Excel和Jupyter之间不断移动数据然后运行一些Python代码

PyXLL的主要用例之一是用Python编写自定义Excel工作表函数(或“ UDF”)。这用于在使用Python函数构建的Excel中构建模型,这些函数当然可以使用其他Python库(例如pandas和scipy)。

你也可以在Jupyter笔记本中编写Excel工作表函数。这是在不离开Excel即可使用Python IDE的情况下尝试想法的绝佳方法。

自己试试吧。编写一个简单的函数,然后将“ pyxll.xl_func”修饰符添加到你的函数中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 from pyxll import xl_func
 
 @xl_func
 def test_func(a, b, c):
     # This function can be called from Excel!
     return (a * b) + c

输入代码并在Jupyter中运行单元格后,即可立即从Excel工作簿中调用Python函数。

不只是简单的功能。你可以将整个数据范围作为pandas DataFrames传递给函数,并返回任何Python类型,包括numpy数组和DataFrames!你可以通过给@xl_func装饰器一个参数字符串来告诉PyXLL期望什么类型。

例如,尝试以下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 from pyxll import xl_func
 
 # The "signature" tells PyXLL how to convert the arguments
 # and returned value.
 @xl_func("dataframe df: dataframe<index=True>", auto_resize=True)
 def df_describe(df):
     # 'df' is a pandas DataFrame built from the range passed
     # to this function.
     desc = df.describe()
     
     # 'desc' is a new DataFrame, which PyXLL will convert to
     # a range of values when returning to Excel.
     return desc

现在,你可以编写复杂的Python函数来进行数据转换和分析,Excel中如何调用或排序这些函数。更改输入会导致调用函数,并且计算出的输出会实时更新,这与你期望的一样!

在Excel中使用Python而不是VBA的脚本

你是否知道在VBA中可以执行的所有操作也可以在Python中完成?编写VBA时将使用Excel对象模型,但是Python也提供相同的API。

在Excel中运行的Jupyter笔记本中,可以使用整个Excel对象模型,因此你可以使用与Excel VBA编辑器中完全相同的方式编写Excel脚本。

由于PyXLL在Excel进程内运行Python,因此从Python调用Excel不会对性能造成任何影响。也可以从外部Python进程调用Excel,但这通常要慢得多。在Excel中运行Jupyter笔记本也使一切变得更加便捷!

使用PyXLL的xl_app函数获取“ Excel.Application”对象,该对象等效于VBA中的Application对象。尝试进行诸如获取当前选择和更改单元格内部颜色之类的操作。弄清楚如何使用Excel对象模型进行操作的一种好方法是记录VBA宏,然后将该宏转换为Python!PyXLL文档页面Python作为VBA的替代品提供了一些有关如何做到这一点的技巧。

总结

Python是VBA的强大替代品。使用PyXLL,你可以完全用Python编写功能齐全的Excel加载项。Excel是一种出色的交互式计算工具。添加Python和Jupyter将Excel提升到一个全新的水平。

使用Jupyter笔记本编写的代码可以轻松地重构为独立的Python包,以创建Excel工具包来为直观的工作簿和仪表板提供动力。任何Excel用户都将能够利用使用PyXLL编写的Python工具,而无需任何Python知识。

最后 PyXLL的官网地址:https://www.pyxll.com/blog/python-jupyter-notebooks-in-excel/

作者:Tony Roberts

原文地址:https://towardsdatascience.com/python-jupyter-notebooks-in-excel-5ab34fc6439

deephub翻译组

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
4 个有效提升 Jupyter Notebooks 效果的非凡技巧
链接 | https://towardsdatascience.com/4-awesome-tips-for-enhancing-jupyter-notebooks-4d8905f926c5
AI研习社
2020/02/21
1.5K0
再见 VBA!神器工具统一 Excel 和 Python
经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评。这次也不例外,我要再推荐一个,而且是个爆款神器。
数据森麟
2021/01/08
5.6K0
再见 VBA!神器工具统一 Excel 和 Python
终于,在Excel里也能直接写python了!
之前在处理数据的时候,最开始都是在excel里处理,后来当数据量上了一个级别后就用python导入excel文件接着处理了
行哥玩Python
2021/11/23
1.6K1
xlwings,让excel飞起来!
excel已经成为必不可少的数据处理软件,几乎天天在用。python有很多支持操作excel的第三方库,xlwings是其中一个。
朱卫军 AI Python
2022/04/02
2.5K0
xlwings,让excel飞起来!
Python处理Excel数据的方法[通俗易懂]
当Excel中有大量需要进行处理的数据时,使用Python不失为一种便捷易学的方法。接下来,本文将详细介绍多种Python方法来处理Excel数据。
全栈程序员站长
2022/11/18
5.6K0
python:Pandas里千万不能做的5件事
作为一个在进入数据分析领域之前干过开发的攻城狮,我看到我的同行以及新手在使用 Pandas 时会犯很多低级错误。
王图思睿
2021/06/16
1.6K0
一个 Python 报表自动化实战案例
今天给大家分享一本我好朋友俊红老师的新书《对比Excel,轻松学习Python报表自动化》中关于报表自动化实战的内容。
杰哥的IT之旅
2021/11/10
9880
【精心解读】关于Jupyter Notebook的28个技巧
Jupyter具有很强的可扩展性,支持许多编程语言,可以很容易地托管在计算机上或几乎所有的服务器上,只需要拥有ssh或http访问权限。 最重要的是,它是完全免费的。
量化投资与机器学习微信公众号
2018/01/30
7.6K0
【精心解读】关于Jupyter Notebook的28个技巧
7 个 Python 特殊技巧,有效提升数分效率!
该工具效果明显。下图展示了调用 df.profile_report() 这一简单方法的结果:
昱良
2019/10/28
1.1K0
7 个 Python 特殊技巧,有效提升数分效率!
ChatGPT与Excel结合_编写VBA宏
⭐Excel VBA宏(Visual Basic for Applications)是一种用于在Microsoft Excel中自动化和扩展功能的编程语言。VBA允许用户编写自定义的脚本或宏,以便通过执行一系列指令来自动完成特定任务。
天天Lotay
2023/10/15
7220
ChatGPT与Excel结合_编写VBA宏
Python让Excel飞起来:使用Python xlwings实现Excel自动化
本文将向你展示如何使用Python xlwings库自动化Excel。毋庸置疑,Excel是一款非常棒的软件,具有简单直观的用户界面,而Python是一种强大的编程语言,在数据分析方面非常高效。xlwings就像胶水一样,将两者连接到一起,让我们能够同时拥有两者最好的一面。
fanjy
2021/11/10
9.9K0
Python让Excel飞起来:使用Python xlwings实现Excel自动化
"替代Excel Vba"系列(一):用Python的pandas快速汇总
以前学习 Python 的 pandas 包时,经常到一些 excel 的论坛寻找实战机会。接下来我会陆续把相关案例分享出来,还会把其中的技术要点做详细的讲解。
咋咋
2023/11/06
4600
"替代Excel Vba"系列(一):用Python的pandas快速汇总
"Python替代Excel Vba"系列(二):pandas分组统计与操作Excel
在本系列的上一节已经介绍了如何读写 excel 数据,并快速进行汇总处理。但有些小伙伴看完之后有些疑惑:
咋咋
2021/09/01
1.7K0
"Python替代Excel Vba"系列(二):pandas分组统计与操作Excel
Python编程神器Jupyter Notebook使用的28个秘诀(附代码)
[ 导读 ]最近做实验一直是用Jupyter Notebook编程,有一种打草稿的便捷感,在dataquest上看到一篇博客总结了28种Jupyter Notebook的使用技巧。为了方便大家理解,对原文一个简略的地方进行了适当的解释和扩充。希望大家在用Jupyter Notebook编程时可以更加爽快。
数据派THU
2019/12/31
4.6K0
Python编程神器Jupyter Notebook使用的28个秘诀(附代码)
9个可以提高Jupyter Notebook开发效率的魔术命令
正如它的名字,魔术命令是一个特殊的命令。魔术命令通过将%符号与要运行的命令一起使用来工作。
deephub
2021/03/10
1.3K0
9个可以提高Jupyter Notebook开发效率的魔术命令
加速Python数据分析的10个简单技巧(上)
总有一些小贴士和技巧在编程领域是非常有用的。有时,一个小技巧可以节省时间甚至可以挽救生命。一个小的快捷方式或附加组件有时会被证明是天赐之物,并能真正提高生产力。因此,我总结了一些我最喜欢的一些贴士和技巧,我将它们以本文的形式一起使用和编译。有些可能是大家相当熟悉的,有些可能是比较新的,但我确信它们将在下一次您处理数据分析项目时派上用场。
AiTechYun
2019/07/05
1.7K0
加速Python数据分析的10个简单技巧(上)
可能是全网最完整的 Python 操作 Excel库总结!
在之前的办公自动化系列文章中,我已经对Python操作Excel的几个常用库openpyxl、xlrd/xlwt、xlwings、xlsxwriter等进行了详细的讲解。
小F
2021/03/18
9.2K0
可能是全网最完整的 Python 操作 Excel库总结!
Python代替Excel VBA,原来真的可以
👆点击“博文视点Broadview”,获取更多书讯 ▊ VBA与Python:当王者荣耀遇到卷王之王 VBA语言是VB的一个子集,具有简单易学、功能强大的特点。 上世纪90年代末至今,VBA语言被大部分主流行业软件用作脚本语言,包括办公软件如Excel、Word、PowerPoint等,GIS软件如ArcGIS、MapInfo、GeoMedia等,CAD软件如AutoCAD、 SolidWorks等,统计软件如SPSS等,甚至连图形软件如PhotoShop、CoralDraw等也使用VBA进行脚本编程。
博文视点Broadview
2023/04/12
3.1K0
Python代替Excel VBA,原来真的可以
15个节省时间的Jupyter技巧
作为数据科学家,从加载数据到创建和部署模型,我们几乎每天都在使用Jupyter notebook。
deephub
2023/02/01
2.1K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46K0
Excel VBA编程
推荐阅读
相关推荐
4 个有效提升 Jupyter Notebooks 效果的非凡技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验