再见 VBA!神器工具统一 Excel 和 Python
作者 | 东哥起飞
来源 | Python数据科学
经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评。这次也不例外,我要再推荐一个,而且是个爆款神器。
Excel和Jupyter 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中利用这些可视化包随意绘图,包括matplotlib、plotly、bokeh和altair等。
%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工作簿调用。
不只是简单的函数,还可以将整个数据作为pandas的DataFrames传给函数,并返回任何的Python类型,比如numpy array、DataFrames,甚至还可以通过给@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/userguide/vba.html
Jupyter Notebook在Excel中运行,整个Excel对象都可用,所有操作就像在VBA编辑器中编写Excel脚本一模一样。
由于PyXLL在Excel进程内运行Python ,因此从Python调用Excel不会对性能造成任何影响。当然,也可以从外部Python进程调用Excel,但这通常要慢很多。在Excel中运行Jupyter Notebook,一切变得就不一样了!
使用PyXLL的xl_app函数获取Excel.Application对象,该对象等效于VBA中的Application对象。弄清楚如何使用Excel对象模型进行操作的一种好方法是记录VBA宏,然后将该宏转换为Python。
下图中尝试将当前选择单元格更改颜色。
三、总结
PyXLL将完美融合Python和Excel,实现了以下功能,为表格数据处理提升一个全新的高度。
Excel和Python共享数据
在Excel中使用Python绘图
从Excel调用Python函数
替代VBA脚本
不得不说这个工具是真的香,喜爱Python的同学可以不用学习VBA了,Python脚本打天下。
更多精彩推荐
这个开源的“抢茅台脚本”,火了
舌尖上的AI:人工智能技术正在被“端上”餐桌
腾讯AI足球队夺冠Kaggle竞赛,绝悟强化学习方案迁移至足球队
一男子蒙冤入狱10天,竟是 AI 认错了!
我酸了!又是别人家公司!百度新年发 U 奖金鼓励员工
相关文章:

Android 开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮。如果您是一位2013年刚刚…

SQL Server各种日期计算方法
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几…

TensorFlow入门
为什么80%的码农都做不了架构师?>>> TensorFlow核心教程 导入TensorFlow计算图tf.train API 完成程序tf.contrib.learn 基本用法自定义模型下一步原文链接 : https://www.tensorflow.org/get_started/get_started 译文链接 : http://www.apache.wiki/pa…
C#实现类似qq的屏幕截图程序
因为近来想写个类似于远程桌面监控的程序,该程序中要用到屏幕捕捉.为实现该程序的一部分功能,做了个小DEMO.程序很简单,用到的技术也不多,只能实现类似qq的截图功能(方法虽然很笨) 程序流程如下:1.截取整个屏幕并保存 2.新开一个全屏窗口,将保…

构建RESTful风格的WCF服务
RESTful Wcf是一种基于Http协议的服务架构风格。 相较 WCF、WebService 使用 SOAP、WSDL、WS-* 而言,几乎所有的语言和网络平台都支持 HTTP 请求。 RESTful的几点好处: 1、简单的数据通讯方式,基于HTTP协议。避免了使用复杂的数据通讯方式。 …
又一起“删库”:链家程序员怒删公司 9TB 数据,被判 7 年
整理 | 王晓曼来源 | CSDN(ID:CSDNnews)1月6日,北京市第一中级人民法院公布前链家员工破坏计算机信息系统罪一案的刑事裁定书,被告人因不满工作调整,删公司9TB数据。北京市海淀区人民法院判决认定ÿ…

hbase以mr导数据方式
./hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator"," -Dimporttsv.columnsHBASE_ROW_KEY,f1:name,f1:age,f1:addr t1 /zldata/demo1.csv转载于:https://www.cnblogs.com/sajia/p/6972420.html

Php中正则小结(一)
一.概念 语法模式类似perl.表达式必须用分隔符闭合,比如一个正斜杠(/). 分隔符可以是任意非字母非数字,除反斜杠(\)和空字节之外的非空白ascii字符 如果分隔符 在表达式中使用,需要使用反斜线进行转义。 二.组成 元字符 一个正则表达式基本组…

在C#.net中如何操作XML
在C#.net中如何操作XML需要添加的命名空间:using System.Xml; 定义几个公共对象:XmlDocument xmldoc ;XmlNode xmlnode ;XmlElement xmlelem ; 1,创建到服务器同名目录下的xml文件: 方法一:xmldoc new XmlDocument…
精彩碰撞!神经网络和传统滤波竟有这火花?
作者 | 凌霄出品 | AI大本营(ID:rgznai100)惯性传感器在航空航天系统中主要用于姿态控制和导航。微机电系统的进步促进了微型惯性传感器的发展,该装置进入了许多新的应用领域,从无人驾驶飞机到人体运动跟踪。在捷联式 …

软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)...
2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题) 16.信息系统的安全威胁分成七类,其中不包括()A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效…

ASP.NET 2.0 读取配置文件[INI](示例代码下载)
(一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码 1 ///<summary>2 ///INIFILE 操作类3 ///</summary>4 publicclassINIFILE5 {6 [DllImport("kernel32")]7 privatestaticexternlongWritePrivateProfileString(stringsectio…
CSDN送会员?免费的!都来领!
距离春节还有不到一个月你准备好给家人的春节礼物了吗?疫情下,为了让程序猿同学开心加班小编提前准备了一份牛年大礼 周五福利日,人人都可免费领会员!助你提前实现CSDN会员卡自由!奖品多多,不仅有CSDN月卡会…

BGP相邻体之间磋商的过程
一.BGP的几个概念 空闲(IDLE) 等待由管理员发起的START事件 正确,到连接状态 错误,回到空闲状态 连接状态(Connect) 等待TCP的连接是否成功,以期望获得一个对等体 正确,到开放发送Op…

去除ios input部分默认样式
input[typesubmit],input[typebutton]{-webkit-appearance:none;outline:none } input{border-radius: 0;}转载于:https://www.cnblogs.com/bbqwwb/p/6993064.html

Asp.net 2.0 C#实现压缩/解压功能
Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载) (一). 实现功能对文件及目录的压缩及解压功能(二). 运行图片示例(三).代码 1. 压缩类 1/**//// <summary> 2/// 压缩类 3/// </summary>4publicclassZipClass5{ 6 public static void ZipFile(string Fi…

图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)
2019独角兽企业重金招聘Python工程师标准>>> 在ImagXpress中用用于处理TIFF文件的TIFF编辑API,但是怎么使用呢,下面来具体的看看 ImagXpress中的ImageX.DeletePage 方法一次可以删除一个页面,ImageX.DeletePages 方法允许开发人员…
用Matplotlib轻松复刻分析图,看看哪个城市买房最自由
作者 | 费弗里来源 | Python大数据分析简介前不久「贝壳研究院」基于其丰富的房地产相关数据资源,发布了「2020 新一线城市居住报告」:图1而在这个报告中有几张数据可视化作品还是比较可圈可点的,作为(在模仿中精进数据可视化&…

Python 代码规范
前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标…

二级域名用asp.net 2.0的实现方案
本人所了解有两种方案,可能还有其的方式,希望大家多多讨论! 基本思路:1. 域名支持泛解析,即是指:把A记录 *.域名.com 解析到服务器IP,服务器IIS中做绑定,绑定时主机头为空;2. 为了…
又一例“监视员工?”百度回应:和 996 无关,目前没有任何应用
整理 | 王晓曼图源 | 视觉中国出品 | 程序人生 (ID:coder _life)1月13日晚间,针对百度公开“员工工作状态预测”专利惹争议一事,百度在官方微博火速回应称,这是一个管理上的“人岗匹配”衡量方法࿰…

僵死进程和僵尸进程
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一…

AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct; 代码: #include <bits/stdc.h> using namespace std; #define maxn 200005 int n,m,f[maxn],ch[maxn][2],rev[maxn],ki[maxn],sta[maxn],top,lit,size[maxn]; inline void in(int &now) {c…

C#与RSS亲密接触
讲述动态生成RSS文件的方法。动态生成RSS文件也基本有两种方法,一种是用字符串累加的方法,另一种是使用xml文档生成的方法。字符串累加的方法也比较简单,我也就不多说了,这里着重说一下生成XmlDocument的方法,包括各种…
2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!
【编者按】一年一度的 ACM Fellow 名单现已新鲜出炉!向来以严格审查闻名的ACM Fellows,今年居然共选择了 95 名科学家,其中还有 13 位华人,来看看都是哪些大佬吧!整理 | 郑丽媛出品 | CSDN(ID:C…

Mybatis调用Oracle的存储过程
如何使用Mybaits调用数据库中的存储过程,下面以Oracle数据库的为例:1.在数据库中创建以下的存储过程:2.编写SQL映射文件WxclDAO.xml:<select id"selectWxcl2" parameterType"java.util.M…

JavaScript - 数据类型和变量
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同…

用Socket发邮件的代码(可以群发)
qunFa.aspx文件的代码: <%... Page language"c#" Codebehind"qunFa.aspx.cs" AutoEventWireup"false" Inherits"liuwei.hanmail.qunFa" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN&qu…

rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系
如果插件B需要引用插件A中的jar 通常需要以下几步: 1.插件B要依赖插件A 2.在插件B的build path中添加插件A的jar包 3.插件A的runtime导出插件B中使用jar的package