excel vba 调用webbrowser_Python杀死Excel?我只会用Python来增强Excel!

8ada5faaeaea7b6f2bd1951ad96ae0df.png

Excel既是一种祝福,也是一种诅咒。当涉及到足够小的数据和足够简单的操作时,Excel是王者。然而,一旦你发现数据非常多时,它就会变成一种痛苦。当然,你可以使用Excel VBA来解决这些问题,但是在2020年,你感到庆幸,因为你不必这么做!

如果有办法把Excel和Python结合在一起,给Excel插上翅膀那就更好了!一个名为xlwings的python库允许您通过VBA调用python脚本并在两者之间传递数据。

为什么要将Python与Excel VBA集成?

事实上,你可以在VBA中做任何事情。所以,如果是这样,为什么要使用Python?嗯,有很多原因。

  1. 你可以在Excel中创建自定义函数,而不必学习VBA
  2. 用户在Excel的使用中感觉很舒服
  3. 使用Python可以显著加快数据操作的速度
  4. 在Python中,几乎所有东西都有库(机器学习、数据科学等)
d25f4e4af738f0cfb4eebee890d50e09.png

准备使用xlwings

我们需要做的第一件事,就像我们想使用的任何新库一样,就是安装它。这是非常容易做到的,通过两个命令,我们很快就会建立起来。所以,继续输入你的终端:

pip install xlwings

下载并安装库后,我们需要安装Excel集成部分。确保已关闭所有Excel实例和任何终端类型:

xlwings addin install

如果没有遇到错误,你应该能够继续。但是在Win10 with Excel 2016上,人们经常会看到以下错误:

xlwings 0.17.0[Errno 2] No such file or directory: 'C:甥敳獲costaAppDataRoamingMicrosoftExcelXLSTARTxlwings.xlam'

如果你是一个幸运的人来经历上述错误,你所需要做的就是创建丢失的目录。通过使用mkdir命令,您可以很容易地做到这一点。就我而言,我做到了:

mkdir C:甥敳獲costaAppDataRoamingMicrosoftExcelXLSTART

假设excel与python库的集成安装成功,你将注意到的主要区别是excel:

11ff758bb4957eee99e63c1835404d54.png

为xlwings启用用户定义函数

首先,我们需要加载Excel加载项,你可以点击Alt,L,H,然后导航到上面的目录来加载插件。完成后,您应该能够看到以下内容:

82a9de95b5fe2ac6432d9c035f1c3e4b.png

最后,需要启用对VBA工程对象模型的信任访问。你可以通过导航到“文件>选项>信任中心>信任中心设置>宏设置”来执行此操作:

6b69ef24af5ba9b67b7acbe16062219a.png

xlwings入门

从Excel到Python(和返回)有两种主要方式。第一个是直接从VBA调用Python脚本,另一个是通过用户定义的函数。让我们快速看一下两者。

为了避免任何混乱,并有正确的设置每次,xlwings提供创建您的Excel电子表格,准备好了。然后让我们使用这个功能。使用终端,我们导航到喜欢的目录并键入:

xlwings quickstart ProjectName

我叫这是MyFirstPythonXL。上面的命令将在预先导航的目录中创建一个新文件夹,其中包含一个Excel工作表和一个python文件。

a951597bd5411b5535e2c064f1a9410a.png

打开.xlsm文件时,你会注意到一个名为xlwings.conf的新Excel工作表。如果要覆盖xlwings的默认设置,你只需重命名此工作表并删除起始下划线。这样,我们都准备好开始使用xlwings了。

VBA到Python

在我们开始编码之前,让我们首先确保我们都在同一页上。要打开我们的Excel VBA编辑器,请按Alt+F11。这将返回以下屏幕:

61517bd799976be4e3a7c13bfe3c0bc3.png

这里要注意的关键是,此代码将执行以下操作:

  1. 在与电子表格相同的位置查找Python脚本
  2. 查找与电子表格同名的Python脚本(但扩展名为.py)
  3. 在Python脚本中,调用函数“main()”

不用再费心了,让我们来看看如何使用它的几个例子。

例1:在Excel之外操作,并返回输出

在本例中,我们将看到如何在Excel之外执行操作,但随后将结果返回到电子表格中。这可以有无限多的用例。

我们将从CSV文件中获取数据,对所述数据进行修改,然后将输出传递给Excel。让我们回顾一下这有多简单:

首先,VBA代码:

我把它与默认设置完全保持不变。

然后,Python代码:

import xlwings as xwimport pandas as pddef main():    wb = xw.Book.caller()    df = pd.read_csv(r'C:empTestData.csv')    df['total_length'] =  df['sepal_length_(cm)'] + df['petal_length_(cm)']    wb.sheets[0].range('A1').value = df

结果如下:

1627fc12d6b007d8256cf9604fc37829.gif

示例2:使用Excel输入驱动操作

在本例中,我们将从Excel读取输入,用Python对其进行处理,然后将结果传递回Excel。

更具体地说,我们要读一个问候语,一个名字和一个文件位置,在那里我们可以找到笑话。然后,我们的Python脚本将从文件中随机抽取一行,并返回一个笑话。

首先,VBA代码:

我把它与默认设置完全保持不变。

然后,Python代码:

import xlwings as xwimport randomdef random_line(afile):    line = next(afile)    for num, aline in enumerate(afile, 2):      if random.randrange(num): continue      line = aline    return line'Function from: stackoverflowdef main():    wb = xw.Book.caller()    listloc = str(wb.sheets[0].range('B3').value)    fhandle = open(listloc, encoding = 'utf-8')wb.sheets[0].range('A5').value = wb.sheets[0].range('B2').value + ' ' + wb.sheets[0].range('B1').value + ' here is a joke for you'    wb.sheets[0].range('A6').value = random_line(fhandle)

结果如下:

3384b8d9315409119e3058eb720f6fba.gif

带xlwings的用户定义函数

我们将以与以前几乎相同的方式更改python文件中的代码。为了将某些内容转换为Excel用户定义函数,我们只需在函数所在的行之前包含“@xw.func”:

Python代码:

import xlwings as xw@xw.funcdef joke(x):    wb = xw.Book.caller()    fhandle = open(r'C:Templist.csv')    for i, line in enumerate(fhandle):        if i == x:            return(line)

结果如下:

36a5af90846a76e5796a90e17f2394c9.gif

结论

我想你会同意这是一个非常好用的小工具。如果你和我一样,更喜欢使用Python而不是VBA,但需要使用电子表格,那么这可能是一个非常好的工具。

--END--

欢迎大家关注我们的公众号:为AI呐喊(weainahan)

为了帮助更多缺少项目实战的同学入门Python,我们在头条上创建了一个专栏:《7小时快速掌握Pthon核心编程》欢迎大家点击下方链接或者阅读原文进行试看~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值