百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

再见 VBA!神器工具统一 Excel 和 Python

ztj100 2025-04-09 22:45 8 浏览 0 评论

欢迎关注@DailyGitHub,更多有用、有趣的技术干货等着你!欢迎点赞、收藏、转发!

大家好,今天给大家推荐一个,而且是个爆款神器。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", auto_resize=True)
def df_describe(df):
    # df 是一个从数据集里创建的 pandas DataFrame 传递给函数
    desc = df.describe()
    # desc 是新的 DataFrame(PyXLL转换为一组值并返回给Excel所创建的)
    reurn desc

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

4. 替代VBA

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

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

https://www.pyxll.com/docs/userguide/vba.html

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脚本打天下。

    相关推荐

    Whoosh,纯python编写轻量级搜索工具

    引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

    如何用Python实现二分搜索算法(python二分法查找代码)

    如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

    路径扫描 -- dirsearch(路径查找器怎么使用)

    外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

    78行Python代码帮你复现微信撤回消息!

    来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

    从零开始学习 Python!2《进阶知识》 Python进阶之路

    欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

    白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

    一、背景介绍...

    Python之txt数据预定替换word预定义定位标记生成word报告(四)

    续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

    假期苦短,我用Python!这有个自动回复拜年信息的小程序

    ...

    Python——字符串和正则表达式中的反斜杠('\')问题详解

    在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

    Python re模块:正则表达式综合指南

    Python...

    Python中re模块详解(rem python)

    在《...

    python之re模块(python re模块sub)

    re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

    MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

    在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

    Zabbix监控系统系列之六:监控 mysql

    zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

    mysql系列之一文详解Navicat工具的使用(二)

    本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

    取消回复欢迎 发表评论: