星彩网彩票开奖走势图表大全-"Python代替Excel Vba"系列(终):vba中调用Python

请重视本号,后续会有更多相关教程。转发本文并私信我"python",即可取得按水平范畴分类好的Python材料

系列文章

  1. "代替Excel Vba"系列(一):用Python的pandas快速汇总
  2. "Python代替Excel Vba"系列(二):pandas分组计算与操作Excel
  3. "Python代替Excel Vba"系列(三):pandas处理不标准数据
  4. "Python代替Excel Vba"系列(四):课程表剖析与动态可视化图表

前语

有小伙伴向我反映到,本系列前面的章节首要仍是在讲 pandas ,简直与 xlwings 没有啥联系。

本系列一向着重要善用各种东西,作为本系列的最终一节,那么这次就用一比方阐明怎么让Python结合Vba,直接在Excel中动态获取星彩网彩票开奖走势图表大全-"Python代替Excel Vba"系列(终):vba中调用Python各种处理条件,输出成果。

日后也会不定期共享 pandas 的处理事例,但不一定非要与 Excel 挂钩。比方直接结合 power bi 做处理剖析。

本文首要作用如下图:

  • 处理数据的进程在 Python 中进行。
  • 输入条件,输出成果的进程在 Vba 进行模拟人生3。
  • 能够随意修正汇总办法(求和、平平等)与汇总字段。
  • 能够随意修正汇总字段和过滤条件。
  • 一切的修正都无需改动代码。
  • 数据源文件与显示文星彩网彩票开奖走势图表大全-"Python代替Excel Vba"系列(终):vba中调用Python件是独立分隔的。

本文关键:

  • 运用 xlwings 注册 Python 办法到星彩网彩票开奖走势图表大全-"Python代替Excel Vba"系列(终):vba中调用Python Vba 模块
  • Vba 调用 Python 办法,输出成果到 Excel

留意:尽管本文是"Python代替Excel Vba"系列,但期望各位读者理解,东西都是各有所长,挑选合适的东西,才是最好的。


事例

本次数据来自于微软官方供给的财务数据。如下图:

  • 数据大致表明每个部分每个月的出售状况
  • Units Sold 列是出售额

本文所用到的 pandas 技巧都在之前的章节已有具体介绍,因而本文只对要点细节做解说



导入包

本文所需的包,装置指令如下:

pip install pandas
pip install numpy
pip install xlwings

主张你装置 anaconda ,那么最难装置的 pandas 和 numpy 都不会是问题。

脚本中导入


界说 Python 办法

首要界说一个对 pandas 的 DataFrame 进行过滤的办法。如下图:

  • df.query(where_exp) , 这个是首要的办法。DataFrame 的 query 办法支撑用文本表达查询,因而这儿直接传入外部的字符串即可。
  • 其他的句子是为了避免没有输入任何查询的状况。

然后再界说一个做汇总的办法。如下图:

  • 由于 DataFrame 简直一切的办法都能够传入字符串表明,因而十分方便把这些汇总条件经过外部传入。
  • pd.Grouper(key='Date',freq=date_freq) ,这是 pandas 为处理时刻分组供给的处理办法。只需求在 freq 参数传入字母即可表达你期望按日期的哪个部分进行分组。比方:"M" 表明按月,"Y" 表明按年。

最终,界说一个办法,让 vba 调用。如下图:

  • 这个办法的上方套上一个 xlwings 的装修器 @xw.func。表明这个办法需求注册到 Vba 模块中。
  • 外部传入的是字符串,比方参数 groups 能够是 "col1,col2",因而需求对 groups 和 values 参数调用 split 分裂成列表。
  • 然后就顺序调用之前界说的2个办法 where_df 和 group_df。
  • 接着把 DataFrame 的 columns 与 values 合并成一个 numpy 数组,即可回来。

运用 xlwings 生成项目文件

翻开指令行,履行以下句子,即可装置 xlwings 的加载项:

xlwings addin install
  • 实际上,你在运用 pip 装置 xlwings时,已经有一个 xlwings.xlam文件。
  • 而上述指令行仅仅把这个 xlam 文件放入你的 excel 加载项目录中罢了。

然后,在你的恣意目录中翻开指令行。履行以下句子,即会生成一个 py 文件和一个 带宏的 excel 文件。

xlwings quickstart myproject --standalone
  • 其间 myproject ,能够自界说任何姓名,这个姓名是生成的目录姓名

此时你会发现在当时目录会有一个 myproject 的文件夹,翻开后会看到如下2个文件:

  • 咱们需求往其间的 py 文件写入处理代码。

翻开 myproject.xlsm 文件,你会看到一个教 xlwings 的功用区页。如下图:

  • 点一下上图红框部分,即可注册你的 py 文件中的自界说办法到 vba 中。
  • 他大致原理是读取 py 文件中的办法,然后相应在 vba 中生成姓名和参数相同的 vba 办法。
  • 因而,假设你的 py 文件的办法界说改动了,记住要在这儿点击一下,从头导入界说。假如仅仅办法里边的句子改动,则无需重导入。

按 alt + f11,翻开 vbe(vba的编辑器)。发现其间有3个模块,分别是 Module1 和 xlwings。

  • Module1 是需求咱们自己写入所需的 vba 代码。
  • xlwings 模块是 xlwings 主动生成的,咱们不需求去改动。
  • xlwings_udfs 模块便是你在功用区点击导入按钮时生成的。相同不需求去改动。

到此为止,即可编写 vba 代码去调用。如下:

  • 留意红线部分,回来成果的 numpy 数组索引是从0开端计数。因而这儿需求在最大索引+1才是行和列的数目。
  • 其他就不细说了,会 vba 的小伙伴应该一看就懂。


最终

你发现这样做的一个优点是,无需重复发动 Python ,由于每次发动 Python 都需求不少时刻(大约2、3秒的姿态)。而本文的做法,能够让其 Python 进程一向存在。

总结

  • 运用 xlwings 能够让 Vba 调用 Python 。
  • 把杂乱的汇总处理流程让给 Python 处理。
  • Vba 处理 Excel输出成果等,别再让 vba 做他不拿手的工作。

[源码地址](https://github.com/CrystalWindS星彩网彩票开奖走势图表大全-"Python代替Excel Vba"系列(终):vba中调用Pythonnake/Creative/tree/master/python/excel_pandas/5)

请重视本号,后续会有更多相关教程。