Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,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的加载项:
>> pip install pyxll
>> pyxll install
安装完PyXLL Excel插件,下一步就是安装PyXLL -jupyter软件包。该软件包提供了PyXLL和Jupyter之间的链接,因此我们可以在Excel内使用Jupyter笔记本。
使用pip安装pyxll-jupyter包:
>> 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魔术函数有几个选项:
-c或--cell。 传递单元格的地址以获取值,例如%xl_get --cell A1:D5。-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都很容易。
%xl_set
魔术函数“%xl_set”获取一个Python对象并将其写入Excel。在Excel中是否有想要的数据框“ df”?只需使用“%xl_set df”,它将被写入Excel中的当前选择。
与%xl_get一样,%xl_set也具有一系列选项来控制其行为。你甚至可以使用PyXLL的单元格格式设置功能在将结果写入Excel的同时自动应用格式设置。
-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。
%xl_plot
使用“%xl_plot”在Excel中绘制任何Python图表。 从一个受支持的绘图库中向其传递任何图形对象,或使用最后一个pyplot图形。 使用pandas plot的效果也很好,例如。 %xl_plot df.plot(kind=‘scatter’).
%xl_plot魔术函数具有一些选项来控制其工作方式:
-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”修饰符添加到你的函数中:
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期望什么类型。
例如,尝试以下方法:
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
deephub翻译组
Jupyter Notebooks嵌入Excel并使用Python替代VBA宏相关推荐
- c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,Excel和Python Jupyter Notebook之间我们只能选择一个.但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exce ...
- python 调用vba 参数 保存表格_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...
- python可以嵌在vba中吗_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...
- python win32com + VBA宏 操作Excel,清除Excel中的公式
python win32com + VBA宏 操作Excel,清除Excel中的公式 最近有个需求是自动化清楚excel中的公式,尝试了使用openpyxl读取的时候不加载公式,但这样的结果是使用了公 ...
- excel粘贴 粘贴值 使用VBA宏匹配目标格式
当您按下键盘上的Ctrl + V键时,也可以使用VBA宏始终默认设置黏贴模式为匹配目标格式.只需执行以下步骤: 步骤1:打开您的Excel工作簿,然后单击开发工具选项卡下的"Visual B ...
- excel分列---多页批量操作--vba宏实现
代码如下 Sub 宏4() //宏名字Dim j As Integer, Arr //定义循环变量j,以及sheet数组ArrFor j = 1 To 108 //对于1-108号sheetWorks ...
- 破解Excel工作表加密和 VBA宏加密
1-excel工作表被加密,无法编辑 例如文件为: 测试.xlsx ①将文件后缀改为rar的压缩包 ②打开压缩包,在 测试.rar\xl\worksheets 路径下 找到sheet1.xml, ③ ...
- excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter
Excel和Jupyter Notebok都是我每天必用的工具,而且两个工具经常协同工作,一直以来工作效率也还算不错.但说实在,毕竟是两个工具,使用的时候肯定会有一些切换的成本. 最近,在逛GitHu ...
- Jupyter Notebooks的安装和Excel表格导入
一.pip 方法安装Jupyter Notebooks 使用pip命令安装之前需要我们先安装Python.此处以python3.10为例 1.安装Python 可以在python下载处,选择对应的系统 ...
最新文章
- IBM 内核惨败:20 亿美元打水漂 !
- BZOJ4539: [Hnoi2016]树
- Verilg 2001相对于Verilog 1995的改进(Z) (内含 乘方 运算符** )
- 动态规划练习【一】 背包问题
- python 约束与异常处理
- [流体输配管网] 使用 Matlab 绘制莫迪图
- 过分的谜题 模拟+思维题
- My Job Exceptation
- CONTINUAL LEARNING FOR AUTOMATED AUDIO CAPTIONING USING THE LEARNING WITHOUT FORGETTING APPROACH
- WDS功能及中继与桥接模式的区别.
- 详述 Kafka 基本原理
- androidStudio移动开发结课总结
- 电路板阻抗原理知识及应用
- 利用ViewPager和WheelView实现横向纵向轮番滚动
- 解决荣耀系列手机打开usb调试无法连接adb的问题
- 离职,见人品,显格局
- 什么是期货/股票分仓软件?
- 【综合练习1】彩虹枚举(红橙黄绿青蓝紫的英文)(>Red:红 >Orange:橙 >Yellow:黄 >Green:绿 >Blue:青 >Indigo:蓝 >Purple:紫)
- 2021 年 1 月程序员工资新出炉,你猜涨了多少?
- 才聚PMP进阶|项目管理实战分享会圆满结束
热门文章
- 理想汽车:迟到的晋级者?
- Linux之MeeGo、Ubuntu Touch、Sailfish、Tizen系统历史关系(四十五)
- IDEA编写SQL语句没有提示
- 在win7系统上使用Python3.8.10进行开发使用
- integer java关键字,integer是关键字吗 integer在c语言中是什么意思
- YOLOv5首发改进最新CVPR2023主干FasterNet系列:实测私有数据集mAP有效涨点,同时降低参数量|为更快的神经网络追求更高的 FLOPS,参数量下降,超越其他轻量化模型
- 学习使我快乐 第五天
- StampedLock 读写锁中的最强王者
- springboot手册阅读
- (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL函数和操作符