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

准备使用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:

为xlwings启用用户定义函数

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

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

xlwings入门

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

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

xlwings quickstart ProjectName

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

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

VBA到Python

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

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

  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

结果如下:

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

结果如下:

带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)

结果如下:

结论

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

--END--

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

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

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

  1. excel vba 调用webbrowser_VBA 公式与函数

    一, 在单元格中输入公式的3种方法: 1) 用VBA在单元格中输入普通公式 Sub formula_1() Range("d2") = ("=B2 * C2") ...

  2. Excel VBA属性、方法、事件大全——Part11(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件 (Object/Attribute/ Method/Event) 描述 (Description) PageBreak 返回或设置分页符的位置 本示例在 Sheet1 的第 2 ...

  3. Excel VBA属性、方法、事件大全——Part7(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件 (Object/Attribute/ Method/Event) 描述 (Description) ID 返回或设置当以网页保存页面时指定单元格的识别标志 本示例将活动工作表上 ...

  4. Excel VBA属性、方法、事件大全——Part12(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件 (Object/Attribute/ Method/Event) 描述 (Description) QBColor 返回一个 Long,用来表示所对应颜色值的 RGB 颜色码. ...

  5. excel vba 调用java_excel中vba调用java程序并获取返回值

    在工作中,为提高excel处理效率会写一些vba宏,有时还需要调用外部java程序(比如访问webservice接口的java程序),下面的事例可做参考 一.编写简单的java调试程序 public ...

  6. Excel VBA属性、方法、事件大全——Part1(Complete List of Excel VBA attribute/method and event)

    为了提取这个列表,也算是费了九牛二虎之力了. VBA调试了不下十遍,但是,能得到这么完整的列表,绝对是值得的.不学好VBA,都有点对不起这么好的资料了,哈哈. Attribute/Method/Eve ...

  7. Excel VBA属性、方法、事件大全——Part6(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件 (Object/Attribute/ Method/Event) 描述 (Description) GammaDist 返回 γ 分布函数值.可以使用此函数来研究具有偏态分布的 ...

  8. Excel VBA属性、方法、事件大全——Part13(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件(Object/Attribute/ Method/Event) 描述(Description) Save 保存指定工作簿所做的更改本示例保存当前活动工作簿.ActiveWork ...

  9. Excel VBA属性、方法、事件大全——Part9(Complete List of Excel VBA attribute/method and event)

    对象/属性/方法/事件 (Object/Attribute/ Method/Event) 描述 (Description) MacID 此函数用在 Macintosh 上,将长为4个字符的常量 转换成 ...

最新文章

  1. php的yii框架开发总结2
  2. Python第十课 网络管理
  3. 【Android应用保护技术探索之路系列】之一:Android应用保护技术开篇
  4. SAP ABAP CI/CD持续集成,持续交付解决方案
  5. c语言通过指针变量输出10个元素,C语言程序设计第2版指针程序设计(10页)-原创力文档...
  6. 如何拍好运动风人像?
  7. 深度学习之Loss不下降原因分析篇
  8. pytorch 入门学习加载数据集-8
  9. linux执行perl脚本,如何从Perl脚本中运行Perl脚本?
  10. 2021年最新微信漫画小程序全开源商业版免费下载
  11. MAGIX Sound Forge Audio Studio v16.0.0.39 WiN 音频编辑软件
  12. 面试一家公司之前需要做的准备
  13. num =10在c语言中是什么意思,num是什么词性
  14. 冬日丹崖风貌--承德碧霞山
  15. 图的割点 图的割边 二分图
  16. HTML中让整个效果居中,仅使用CSS做到完全居中的超级攻略
  17. 齐岳提供AIE分子N-苄基-4-溴-1, 8-蔡酰亚胺,近红外发射的BODIPY-PhOSi和BODIPY-DMA,超分子聚合物PNA-GBP·I2的合成
  18. 深度学习项目实践——制作一个能一键更换证件照背景的软件
  19. ESRGAN - Enhanced Super-Resolution Generative Adversarial Networks论文翻译——中英文对照
  20. float 范围 java_Java中float/double取值范围与精度

热门文章

  1. Github代码上传和下载
  2. GO语言实现文件的断点续传
  3. repne scasb 内联实现 strlen
  4. 【安全漏洞】挖洞小记
  5. Windows Hello 可绕过漏洞进行身份认证
  6. window下pip 用不了的一种解决办法
  7. MySQL修改存储过程(ALTER PROCEDURE)
  8. 5、时间日期的处理:Java Date类、Calendar类详解
  9. 1.4 @SuppressWarnings:抑制编译器警告
  10. 129. 火车进栈【栈】