Excel既是福也是祸。当涉及到足够小的数据和足够简单的操作时,Excel是王者。然而,一旦你发现自己在努力摆脱这些区域,它就会成为一种痛苦。当然,ExcelVBA可以用来解决这些问题,但在2020年,幸运的是你不必这样做!如果有一种方法可以集成Excel和Python,那么Excel……就会长出翅膀!现在有。一个名为xlwings的python库允许用户通过VBA调用python脚本并在两者之间传递数据。为什么要将Python与ExcelVBA集成?事实上,用户可以在VBA中做任何事情。那么,如果是这样,为什么要使用Python?好吧,有很多原因。1.无需学习VBA就可以在Excel中创建自定义函数(如果读者还不知道的话)2.用户对Excel很熟悉3.使用Python可以显着加快数据处理速度4.在Python中,几乎所有东西都有图书馆(机器学习、数据科学等)5.因为你可以!准备好使用xlwings的第一件事就是安装它,就像您要使用的任何新库一样。这很容易做到;使用这两个命令,它可以立即准备就绪。所以在终端输入命令:pipinstallxlwings下载安装库后,还需要安装Excel集成部分。确保您已关闭所有Excel实例和任何终端类型:xlwingsaddininstall假设没有遇到错误,您应该能够继续。但是在Win10上的Excel2016上,经常会看到如下错误:xlwings0.17.0[Errno2]Nosuchfileordirectory:'C:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\\xlwings.xlam'如果您有幸遇到上述错误,您需要做的就是创建丢失的目录。这可以通过使用mkdir命令轻松完成。就笔者而言,笔者所做的:mkdirC:\\Users\\costa\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART假设excel和python库集成安装成功,马上就可以注意excel的主要功能差异:为xlwings启用用户自定义函数首先,需要加载Excel加载项。按Alt、L、H,然后导航到上面的目录以加载插件。完成后,您应该能够看到以下内容:最后,需要启用对VBA工程对象模型的可信访问。这可以通过导航到“文件>选项>信任中心>信任中心设置>宏设置”来完成。xlwings入门从Excel到Python(PythontoExcel)主要有两种方式。第一种是直接从VBA调用Python脚本,另一种是通过用户定义的函数。快速浏览一下两者。为了避免任何混淆并使其每次都正确设置,xlwings提供了创建Excel电子表格的功能,随时可用。让我们在下面使用这个功能。使用终端,导航到您最喜欢的目录并键入:xlwingsquickstartProjectName调用此MyFirstPythonXL。上面的命令将在预导航目录中创建一个新文件夹,其中包含一个excel表和一个python文件。当您打开.xlsm文件时,您会立即注意到一个名为xlwings.conf的新Excel工作表。如果您想覆盖xlwings默认值,只需重命名此工作表并删除起始下划线。这样,准备工作就完成了,下面开始使用xlwings。VBA到Python在我们开始编码之前,首先确保我们都在同一页面上。要打开ExcelVBA编辑器,请按Alt+F11。这将返回以下屏幕:带有xlwings的VBA编辑器这里要注意的关键是这段代码将执行以下操作:1.在与电子表格相同的位置找到一个Python脚本2.找到一个同名的Python脚本电子表格(但扩展名是.py)3.从Python脚本中调用函数“main()”言归正传,让我们来看几个使用示例。示例1:在Excel外部操作并返回输出在本示例中,您将了解如何在Excel外部执行操作,然后将结果返回到电子表格中。这可以有无限数量的用例。从CSV文件中获取数据,对数据进行修改,然后将输出通过管道传输到Excel。这个操作很简单:首先,VBA代码:完全保持默认设置不变。然后,Python代码:importxlwingsasxwimportpandasaspddefmain():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结果如下:例2:用Excel输入驱动本例中的操作,从Excel中读取输入,用Python处理,并将结果传回Excel。更具体地说,读取问候语、名称和可以找到笑话的文件位置。然后Python脚本将从文件中随机取出一行并返回一个笑话。首先,VBA代码:它与默认代码完全相同。然后,Python代码:importxlwingsasxwimportrandomdefrandom_line(afile):line=next(afile)fornum,alineinenumerate(afile,2):ifrandom.randrange(num):continueline=alinereturnline'Functionfrom:stackoverflowdefmain():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+'这是给你开个玩笑'wb.sheets[0].range('A6').value=random_line(fhandle)结果:使用xlwigs的用户定义函数以与以前几乎相同的方式更改python文件中的代码。为了将某些东西变成Excel用户定义的函数,我们只需在函数所在的行前加上“@xw.func”:Python代码:importxlwingsasxw@xw.funcdefjoke(x):wb=xw。书。caller()fhandle=open(r'C:\Temp\list.csv')fori,lineinenumerate(fhandle):ifi==x:return(line)结果是:如果你更喜欢使用Python而不是VBA,但你需要使用电子表格,这个工具是你最好的选择,你可以把它当作一个不错的小数据库。
