快捷搜索:  汽车  科技

超简单用python让excel飞起(我只会用Python来增强Excel)

超简单用python让excel飞起(我只会用Python来增强Excel)首先,我们需要加载Excel加载项,你可以点击Alt,L,H,然后导航到上面的目录来加载插件。完成后,您应该能够看到以下内容:mkdir C:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART假设excel与python库的集成安装成功,你将注意到的主要区别是excel:pip install xlwings下载并安装库后,我们需要安装Excel集成部分。确保已关闭所有Excel实例和任何终端类型:xlwings addin install如果没有遇到错误,你应该能够继续。但是在Win10 with Excel 2016上,人们经常会看到以下错误:xlwings 0.17.0 [Errno 2] No such file or directory: 'C:\\Users\\costa\\AppData\\Roami

超简单用python让excel飞起(我只会用Python来增强Excel)(1)

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

超简单用python让excel飞起(我只会用Python来增强Excel)(2)

准备使用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:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\xlwings.xlam'

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

mkdir C:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART

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

超简单用python让excel飞起(我只会用Python来增强Excel)(3)

为xlwings启用用户定义函数

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

超简单用python让excel飞起(我只会用Python来增强Excel)(4)

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

超简单用python让excel飞起(我只会用Python来增强Excel)(5)

xlwings入门

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

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

xlwings quickstart ProjectName

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

超简单用python让excel飞起(我只会用Python来增强Excel)(6)

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

VBA到Python

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

超简单用python让excel飞起(我只会用Python来增强Excel)(7)

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

  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:\temp\TestData.csv') df['total_length'] = df['sepal_length_(cm)'] df['petal_length_(cm)'] wb.sheets[0].range('A1').value = df

结果如下:

超简单用python让excel飞起(我只会用Python来增强Excel)(8)

示例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)

结果如下:

超简单用python让excel飞起(我只会用Python来增强Excel)(9)

带xlwings的用户定义函数

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

Python代码:

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

结果如下:

超简单用python让excel飞起(我只会用Python来增强Excel)(10)

结论

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

--END--

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

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

猜您喜欢: