RPA俱乐部

 找回密码
 立即注册
查看: 1030|回复: 1

在 UiPath 中运行 VBA(下)

[复制链接]

9

主题

17

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2018-11-30 09:46 | 显示全部楼层 |阅读模式
在UiPath 中运行 VBA(下)
UiPath 自带的Excel 操作包虽然丰富,但是在实际应用中却还是会让你感觉到力不从心。这是由于我们的业务场景千变万化,有太多的场景 UiPath 的操作包也捉襟见肘。

因此,在处理Excel工作簿数据或者操作 Excel 的时候,拥有对 Excel 的全部控制权将会是非常大的优势。然而,在 UiPath 中运行 VBA 代码,可以在工作流中使用 Excel 的所有功能,作为 UiPath 功能的扩展和补充。

本节的教程将和你一起探索 UiPath 调用 Excel 功能的一些实用技巧。

注:这一节的内容是建立在《在 UiPath 中运行 VBA(上)》《在 UiPath 中运行 VBA(中)》这两节教程的基础上。在这里,我将不再详细描述构建 UiPath 自动化程序和 Excel Macro 的调用的所有细节。

这些内容已经在前面的教程中描述得很清楚了,对UiPath 运行Excel VBA的内容没有了解的朋友请先阅读前面的教程,再回来看这篇文章。

下面,我们来从例程中探索 UiPath 结合 VBA 操作的一些技巧:



一、 UiPath 调用 Excel 的内置函数

我们先来个简单点的,直接运用内置函数进行数据处理。

首先,在工作簿 BookWithMacro.xlsm 中输入如下所示的 Macro:
image001.png
然后,在 UiPath 中构建一个如下所示的自动化程序:
image003.png
Execute macro 的属性设置是这样的:
image005.png
注意到,Macro Name 填写的是刚才构建的 InvokeFunction ,而 MacroParameters 则输入两个数字 {10,3} 作为 macro 的参数列表,Macro Output 将结果返回到命名为OutputObject 的 Object 对象中。

这个自动化程序运行的时候,Macro 接收来自工作流的输入参数,然后调用 Excel 的内置函数 Max 对输入参数进行比较大小,然后将结果返回到工作流中,最后工作流将结果打印到日志中。

执行自动化程序后,Output 面板输出了输入参数的最大值。
image007.png
这个例程正确运行,说明了我们能通过 Macro调用 Excel 内置的工作表函数。这是一个很了不起的特性,众所周知,Excel 内置了大量的工作表函数。有了这个技巧,我们就可以将 Excel 大量的工作表函数为我所用。下面展示一下 WorksheetFunction 可以直接使用的函数列表:
image009.gif
你看,在VBE 我们可以使用的函数是如此之多!与 UiPath的众多 Activities 结合将会使我们的编码更加容易!

接下来,让我们通过函数来操作Excel 对象模型,处理工作簿内部的数据。我编写了一个可以根据表名和列名来计算非空行数的宏:
image010.png
然后在 UiPath 工作流中输入表名和列名两个参数,接收宏的返回。程序运行的时候,我得到了对应列的非空单元格数,我将其用 Log Message 打印出来的结果如下:
image012.png
这说明了可以在宏里调用 Excel 内置函数,处理工作簿内的数据!到目前为止,我们已经知道了通过宏 可以处理来自 UiPath 工作流的数据 和 访问工作簿内的对象模型 并 运用内置函数处理数据。

然而,这一切并没有结束,UiPath 与 Excel VBA 结合的实用技巧远不止这些!

更实用的技巧,让UiPath 通过 Execute macro 来运行 VBA 封装的 Excel 内置函数。我封装了常用的Vlookup 函数,可以在 UiPath 中输入数据然后到指定的表中进行数据匹配,最后返回结果。宏的参数列表是这样的:
image014.png
Macro 的属性设置是这样的:
image016.png
查找的表格如下:
image018.png
结果如下:
image020.png
就像我们在工作表中使用 Vlookup 函数一样,我们可以在工作流中输入数据然后在指定的工作表中匹配数据了。

上面的例子中,我们使用供应商 ID <130023085> 到<物料记录表>中查找来料数量(第 4列),工作流能接收到正确的结果。

值得注意的是,这里的 Macro 参数列表除了需要增加一个工作表名(SheetName)以外,其它参数与在Excel 工作表中使用 Vlookup 函数的参数输入保持一致。你可以很轻易地将 Excel 工作表函数的技能迁移到 UiPath 工作流编写中,这看起来很棒。

不知道你留意到了没有,每次使用 Vlookup 函数都需要输入目标列在表格中的列号(Vlookup 的第 3 个参数)。这样的使用体验并不是很友好,因为直接输入列名更加简单直接,输入列号的话还需要根据列名推算列号。

幸好,在 VBA Macro 里,你完全可以按照你的意愿去封装Excel 内置函数。我编写了 VLookup 的另一个版本命名为 SuperVLookup,它的参数列表看起来是这样的:
image022.png
调用的时候直接输入列名而不是列号,本例中是 “来料数量”,Execute Macro 完整的属性列表如下:
image024.png
运行之后能得到正确结果:
image026.png
哈哈,你终于不必每次使用 Vlookup 的时候傻乎乎地数列号了,直接填入列名也能得到正确的结果。

回复

使用道具 举报

9

主题

17

帖子

86

积分

注册会员

Rank: 2

积分
86
 楼主| 发表于 2018-11-30 09:48 | 显示全部楼层
2 UiPath 调用 Excel 的高级功能


在前面的教程中,我曾说过,使用 VBA Macro 可以控制 Excel 的所有方面。接下来我们看看使用 Excel Macro 来调用 Excel 自带功能的情况。下面的历程演示了UiPath 通过 Macro 调用Excel排序功能。

首先,宏的编写如下:
image028.png
你可以指定工作表的名称、表的范围和列的名称,它会以指定的列作为排序依据来对数据表进行升序排列。

自动化程序及属性设置如下:
image030.png
运行前工作表:
image032.png
运行后,来料数据列准确地以升序排列:
image034.png
这说明了我们成功地在 UiPath 中通过 Macro 调用了 Excel 内置的排序功能,并对数据进行了操作。

类似地,你还可以在UiPath 工作流中通过 ExecuteMacro活动调用 Excel 的 数据连接、数据透视表、删除重复值 和 图表绘制 等常用功能。是的,你完全可以将 Excel 和 Excel VBA 作为 UiPath Studio 现有功能的有益扩展和补充。






3 UiPath 模拟运行 Excel 插件
VBA 在 Office 生态中应用广泛。在没有 UiPath 之类的 RPA 工具之前,很多企业的办公自动化工具是基于VBA 编写的。Execute Macro活动的另外一个潜在作用就是在 UiPath 工作流中集成已有的Excel 自动化程序或调用 Excel 插件。

现在,你可以使用 Execute Macro 活动将已有的Excel 自动化程序整合到正在开发的 RPA 程序中了。我们可以物尽其用地利用现有的资源开发新的自动化程序,这对于用户和开发者来说都是再好不过的事情。

为了验证这一设想,我设计了一个用 UiPath 打开Excel自动化程序,输入参数,然后运行宏的程序,得到了预期的结果。
image036.png

这表明,我们完全可以将已有的 VBA 自动化程序整合到UiRobot 运行的工作流中,再借助 UiPath Platform 调度运行、自动运行等特性实现更高层次的自动化。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

手机版|小黑屋|RPA俱乐部 ( 闽ICP备15006840号-20 )

GMT+8, 2019-1-24 04:19 , Processed in 0.047840 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表