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

v2-1921b3314b41e36878cd9cef30b1d3b1_1440w.jpg?source=172ae18b

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中,几乎所有东西都有库(机器学习、数据科学等)

v2-8347eb00aaba68cad93b5f330fcf1b95_b.jpg

准备使用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:UserscostaAppDataRoamingMicrosoftExcelXLSTARTxlwings.xlam'

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

mkdir C:UserscostaAppDataRoamingMicrosoftExcelXLSTART

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

v2-c6bab2481123917eda1cf4d5ce336966_b.jpg

为xlwings启用用户定义函数

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

v2-bbb59e8d9876cbe584d995618956ae1e_b.jpg

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

v2-83adebd82ef2003590f9f8c2aad08774_b.jpg

xlwings入门

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

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

xlwings quickstart ProjectName

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

v2-9d6f0899d12580be1b29486760fc7ba3_b.jpg

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

VBA到Python

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

v2-94fa56514e78f4c8468516ba5d70462c_b.jpg

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

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

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

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

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

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

首先,VBA代码:

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

然后,Python代码:

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

结果如下:

v2-b60a50161d31fc33ac09bede7172890e_b.gif

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

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

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

首先,VBA代码:

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

然后,Python代码:

import xlwings as xw
import 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)

结果如下:

v2-12a903c390101632360ea1e984f685d0_b.gif

带xlwings的用户定义函数

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

Python代码:

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

结果如下:

v2-b589e532d0ce8b50ae3e2fff04fe6ae5_b.gif

结论

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

--END--

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

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

头条专栏​learning.snssdk.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值