以前,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宏相关推荐

  1. c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个.但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exce ...

  2. python 调用vba 参数 保存表格_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...

  3. python可以嵌在vba中吗_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个. 但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exc ...

  4. python win32com + VBA宏 操作Excel,清除Excel中的公式

    python win32com + VBA宏 操作Excel,清除Excel中的公式 最近有个需求是自动化清楚excel中的公式,尝试了使用openpyxl读取的时候不加载公式,但这样的结果是使用了公 ...

  5. excel粘贴 粘贴值 使用VBA宏匹配目标格式

    当您按下键盘上的Ctrl + V键时,也可以使用VBA宏始终默认设置黏贴模式为匹配目标格式.只需执行以下步骤: 步骤1:打开您的Excel工作簿,然后单击开发工具选项卡下的"Visual B ...

  6. excel分列---多页批量操作--vba宏实现

    代码如下 Sub 宏4() //宏名字Dim j As Integer, Arr //定义循环变量j,以及sheet数组ArrFor j = 1 To 108 //对于1-108号sheetWorks ...

  7. 破解Excel工作表加密和 VBA宏加密

    1-excel工作表被加密,无法编辑 例如文件为: 测试.xlsx ①将文件后缀改为rar的压缩包 ②打开压缩包,在  测试.rar\xl\worksheets 路径下 找到sheet1.xml, ③ ...

  8. excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter

    Excel和Jupyter Notebok都是我每天必用的工具,而且两个工具经常协同工作,一直以来工作效率也还算不错.但说实在,毕竟是两个工具,使用的时候肯定会有一些切换的成本. 最近,在逛GitHu ...

  9. Jupyter Notebooks的安装和Excel表格导入

    一.pip 方法安装Jupyter Notebooks 使用pip命令安装之前需要我们先安装Python.此处以python3.10为例 1.安装Python 可以在python下载处,选择对应的系统 ...

最新文章

  1. IBM 内核惨败:20 亿美元打水漂 !
  2. BZOJ4539: [Hnoi2016]树
  3. Verilg 2001相对于Verilog 1995的改进(Z) (内含 乘方 运算符** )
  4. 动态规划练习【一】 背包问题
  5. python 约束与异常处理
  6. [流体输配管网] 使用 Matlab 绘制莫迪图
  7. 过分的谜题 模拟+思维题
  8. My Job Exceptation
  9. CONTINUAL LEARNING FOR AUTOMATED AUDIO CAPTIONING USING THE LEARNING WITHOUT FORGETTING APPROACH
  10. WDS功能及中继与桥接模式的区别.
  11. 详述 Kafka 基本原理
  12. androidStudio移动开发结课总结
  13. 电路板阻抗原理知识及应用
  14. 利用ViewPager和WheelView实现横向纵向轮番滚动
  15. 解决荣耀系列手机打开usb调试无法连接adb的问题
  16. 离职,见人品,显格局
  17. 什么是期货/股票分仓软件?
  18. 【综合练习1】彩虹枚举(红橙黄绿青蓝紫的英文)(>Red:红 >Orange:橙 >Yellow:黄 >Green:绿 >Blue:青 >Indigo:蓝 >Purple:紫)
  19. 2021 年 1 月程序员工资新出炉,你猜涨了多少?
  20. 才聚PMP进阶|项目管理实战分享会圆满结束

热门文章

  1. 理想汽车:迟到的晋级者?
  2. Linux之MeeGo、Ubuntu Touch、Sailfish、Tizen系统历史关系(四十五)
  3. IDEA编写SQL语句没有提示
  4. 在win7系统上使用Python3.8.10进行开发使用
  5. integer java关键字,integer是关键字吗 integer在c语言中是什么意思
  6. YOLOv5首发改进最新CVPR2023主干FasterNet系列:实测私有数据集mAP有效涨点,同时降低参数量|为更快的神经网络追求更高的 FLOPS,参数量下降,超越其他轻量化模型
  7. 学习使我快乐 第五天
  8. StampedLock 读写锁中的最强王者
  9. springboot手册阅读
  10. (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL函数和操作符