2023年11月25日发(作者:)

5 软件自动化

RPA流程中,我们经常需要对ExcelWord等办公软件,或者

浏览器等常用软件进行自动化操作。当然,这些软件都是有界面,也

可以得到界面元素。理论上学习了有目标命令这一章,就可以对这些

软件进行自动化操作了,但这样做起来会比较繁琐。因此,UiBot

地把ExcelWordOutlook、浏览器、数据库等软件的自动化操作

封装成为专门的命令,通过这些命令来操作,会比界面上的模拟更高

效、更方便。比如,虽然我们可以通过界面模拟来模拟真人的操作,

打开、读写一个Excel文档,但是这样非常麻烦,而通过Excel自动

化的命令,只需要一条命令就可以做到。

UiBot自动化操作这些软件之前,您的计算机需要安装相应的

软件。对于ExcelWord自动化,需要安装Office 2007以上版本,

或者WPS 2016以上版本;对于浏览器自动化,需要安装Internet

ExplorerIE)、Google Chrome或者火狐浏览器。

本章假设读者对浏览器WordExcel数据库等软件及相关知识

已经有初步的了解,最好是在工作中使用过这些软件。如果还缺乏了

解,市面上有大量书籍可以参考,本文不另行介绍。

5.1 Excel自动化

ExcelOffice办公软件的重要组成成员,它具有强大的计算、

分析和图表功能,也是最常用、最流行的电子表格处理软件之一。对

Excel实现自动化,是RPA流程中经常遇到的场景。

在实现Excel自动化之前,我们先明确几个概念:工作簿工作

工作簿是处理和存储数据的文件,一个Excel文件对应一个工作

薄,Excel软件标题栏上显示的是当前工作簿的名字。工作表是指工

作簿中的一张表格。每个工作簿默认包含三张工作表,分别叫Sheet1

Sheet2Sheet3,当然也可以删除或者新增工作表,就是说工作薄和

工作表是一对多的关系。

Excel工作薄和工作表

Excel中的工作表是一个二维表格,其中包含很多单元格,使用行

号和列号可以确定一个单元格的具体位置,行号通常用1,2,3,4……

这样的数字序列表示;列号通常用A,B,C,D……这样的字母序列表示。

这样就可以用 列号+行号 来表示一个单元格,比如B3单元格,

是指第3行第2列交界位置的那个单元格。

Excel的行和列

UiBot自动化操作Excel表格的时候,首先需要打开工作簿,

后面的对工作表或单元格的各种操作,都是针对某个已经打开的工作

簿进行的。另外,当自动化操作Excel表格结束以后,还需要关闭已

经打开的工作簿。

我们来尝试用UiBot打开一个工作簿。在UiBot Creator的命令

列表中,选中“软件自动化”并展开,再选中“Excel”并打开,排

在第一位的就是“打开Excel命令,用这条命令可以打开一个Excel

工作簿。

这条命令有三个属性,如下图所示。我们先看“文件路径”属性,

这里需要指定一个Excel工作簿文件的路径,文件可以是xlsxlsx

xlsm等格式。前面说过,这个路径可以是绝对路径,也可以用诸如

@res"

模拟数据.xlsx"

的格式来指代一个相对路径下的文件,相对的是您的流程

所在的文件夹中,名为res的文件夹。另外,请注意在UiBot中,当

字符串里出现符号时,应写为

打开Excel工作簿

如果我们指定的工作簿文件存在,在流程运行的时候,会对这个

文件进行操作。如果文件不存在,在流程运行的时候,会自动创建一

个空白的Excel工作簿文件,并对这个新创建的文件进行操作。

下一个属性是“是否可见”,这是一个布尔类型的属性,其值只

能是“是(True)”或者“否(False)”。当选择“是”的时候,

这条命令会打开Excel软件,并且把这个工作簿显示出来。否则,可

以在不显示Excel软件界面的情况下,仍然正常读取或修改这个工作

簿文件的内容。

还有一条属性是“输出到”,这里必须填写一个变量名,这个变

量指代了我们打开的Excel工作簿,我们称之为一个“工作簿对象”

后面在对工作簿进行各种读取、修改操作的时候,仍然需要把这个变

量填入到相应命令的“工作簿对象”属性中,表明操作是针对这个工

作簿进行的。比如,上图中我们在打开工作簿的时候,“输出到”变

量是,后续的Excel操作命令,其“工作簿对象”属性

objExcelWorkBook

都需要填写

objExcelWorkBook

我们来尝试读取这个工作簿的工作表里面的A1单元格的内

Sheet1

容。插入一条“读取单元格”命令,我们可以看到这条命令的属性如

下图所示:

读取

单元格

如上所述,这里的“工作簿对象”属性,应该和“打开Excel

令”的“输出到”属性是一样的,所以我们需要填写

objExcelWorkBook

表明我们是从刚才打开的工作簿中读取单元格内容。

另外,我们需要指定“工作表”和“单元格”属性,来告诉UiBot

要读取哪个工作表中的哪个单元格。“工作表”和“单元格”的指定

方式也分两种:一种是按照Excel的习惯,用字符串,分

"Sheet1""A1"

别指代名为“Sheet1”的工作表,以及名为“A1”的单元格。

还有第二种方式,就是用一个整数来指代工作表。UiBot中通常

是从0开始编号的,所以整数0代表的是第一张工作表,整数1代表

的是第二张工作表,以此类推,而不管这个工作表实际上叫什么名字。

也可以用中括号里面的两个整数,例如这种方式(实际上是一个

[x, y]

数组,如果不了解数组的概念,可以暂时不用关心这个细节),来指

代单元格。其中都是以1开始编号(这里以1开始编号,是为

xy

了适应Excel的习惯)的整数,代表的是行,代表的是列。例如

xy[1,

1]"A1"[1, 2]"B1"

其实就是单元格,其实就是单元格。

用字符串的形式来指代工作表和单元格,符合Excel的一般习惯,

比较容易让业务人员读懂。用整数的形式来指代工作表和单元格,

以把整数保存在变量里,根据业务逻辑的需要随时变化。例如可以用

[x, y]xy

来指代单元格,这里的可以是变量名,随着循环而依次递

增,就可以依次把多个单元格都读出来,显然灵活性更好。具体用哪

种形式,可以根据实际需要来选择。

“输出到”属性中还需要填写一个变量名,表示把读取到的单元

格内容输出到这个变量中。如果单元格的内容是数值,那么这个变量

的值也会是一个数值;如果单元格的内容是字符串,那么变量的值自

然也是字符串。

在我们的工作中,经常需要读取Excel工作簿的多个单元格里面

的数据,如果用UiBot每次读取一个单元格,既低效又麻烦。实际上,

UiBot已经考虑到了读取一个区域的需求,提供了“读取区域”的命

令,可以一次性的把一个矩形范围内所有单元格的内容全部读取出

来。我们试着插入一条“读取区域”命令,它的属性如下图所示。

取区域

从上图可以看出,“读取区域”命令与“读取单元格”命令相比,

有两个属性完全一致,即“工作薄对象”和“工作表”,这两个属性

表示需要读取哪个工作薄的哪个工作表的内容。

“区域”属性同样采用字符串的形式(需要加双引号表示这是一

个字符串),同样按照Excel的习惯来填写,这里填写的是

"A2:B6"

表示读取的是从左上角A2单元格到右下角B6单元格,共计62

12条数据。

当然,除了用字符串之外,还可以用一个“二维数组”来指代要

读取的区域,例如可以写为,这里的几个整数都可以

"A2:B6"[[2,1], [6,2]]

写为变量,这样的话,读取的范围就可以根据业务逻辑来变化了,灵

活性更好。当然,如果您还不了解二维数组,可以暂时先忽略这种指

代方式,先用字符串来指代就好。

“输出到”属性中填写了一个变量名,读取到的内容将会

arrayRet

输出到这个变量中。例如,对于下图所示的表格,我们要求UiBot

的区域,并且在“读取区域”命令之后,加入一条“输出调

"A1:F2"

试信息”命令,将arrayRet这个变量的值打印出来。

要读取的

Excel表格内容

从输出信息可以看到,“读取区域”命令输出的是一个二维数组,

在上图的例子中,输出的结果是:

[[ "刘备", "关羽", "张飞", "赵云", "马超", "

" ], [ "20K", "18K", "15K", "12K", "10K", "10K" ]]

现在我们还不知道“数组”、“二维数组”是什么,这些概念会

在后文中详细讲解,现在我们只需要知道:利用Excel“读取区域”

命令,可以将一个Excel表格某块区域内的数据全部读取出来,并放

到了一个变量中。

arrayRet

既然能读取,同样也能够写入。UiBot同样提供了一系列的Excel

写入命令来修改工作薄的内容。我们来尝试将上述工作簿的

Sheet1

作表里面的A7单元格的内容写为。在“打开Excel”命令之后

“张三”

插入一条“写入单元格”命令,我们可以看到这条命令的属性如下图

所示:

写入

单元格

其中,“工作簿对象”、“工作表”和“单元格”三个属性的含

义与“读取单元格”命令一致,表示本条命令操作的是哪个“工作簿

对象”的哪个“工作表”的哪个“单元格”。

“数据”属性中填入的是即将写入单元格的数据,可以是数字常

量、字符串常量,也可以是变量或者表达式。

Excel写入类命令,还有一个很重要的属性 —— “立即保存”

属性,如果这个属性选择“是”,那么写入操作会被立即保存,就好

比我们手动修改Excel文件内容后,立即按进行保存一样;

Ctrl+S

而如果这个属性选择“否”,那么写入操作将不会被立即保存,除非

单独调用一次“保存Excel命令,或者在“关闭Excel命令的“立

即保存”属性选择“是”,两种方法效果一样,都可以保存Excel

改的内容。

其它的Excel写入类命令的用法与“写入单元格”命令类似,在

此不再赘述。需要注意的是:每个写入类命令的“数据”属性,必须

与这条写入命令的写入范围一致,这样才能保证数据能够正确写入。

就是说,写入一个单元格,“数据”属性就应该是一个单元格的数据;

写入一行,“数据”属性就应该是一行单元格的数据(一维数组),

且数组的长度与该工作表数据的列数相等;写入区域,“数据”属性

就应该是几行几列单元格的数据(二维数组)。如果不一致,很容易

报错或者出现写入Excel数据错位的情况。

Excel操作完成后,建议使用UiBot的“关闭Excel工作簿”

功能,把当前操作的Excel工作簿关掉。否则,即使UiBot的流程运

行结束了,Excel仍然是打开状态的,还会消耗系统资源。特别是当

我们在打开Excel工作簿时选择了“不可见”的时候,虽然Excel

界面被隐藏了,但其实一直还处于打开状态,不仅会消耗系统资源,

还不太容易被发现。

5.2 Word自动化

Excel类似,Word也是Office办公软件的重要组成成员。Word

格式的文档几乎是办公文档的事实标准,对Word实现自动化,也是

RPA流程中不可回避的一环。

同样地,UiBot自动化操作Word文档的时候,首先需要打开这

Word文档,后面对文档内容的各种操作,都是针对这个已经打开

的文档进行的。当操作Word文档结束以后,还需要关闭已经打开的

文档。

我们来尝试用UiBot打开一个Word文档。在UiBot Creator的命

令列表中,选中“软件自动化”并展开,再选中“Word”并打开,排

在第一位的就是“打开文档”命令,用这条命令可以打开一个Word

文档。

这条命令有五个属性,如下图所示。我们先看“文件路径”属性,

这里需要指定一个Word文件的路径,文件可以是docdocx等格式,

其它注意事项与上一节的“打开Excel”命令的“文件路径”属性一

致。这里我们打开的是res目录下的 文件。

模拟文档.docx

打开

Word文档

接下来是“访问时密码”和“编辑时密码”两个属性,这是什么

意思呢?有时候,出于隐私的考虑,我们的文档不希望他人能够打开,

或者打开后不能修改,因此就给Word文档设置密码,密码分为两个:

一个叫“访问密码”,输入正确的访问密码就可以打开这个文档;一

个叫“编辑密码”,输入正确的编辑密码就可以修改这个文档。这里

的“访问时密码”和“编辑时密码”两个属性就是用来自动化访问带

密码的Word文档的。如果所操作的Word文档没有设置密码,那么这

两个属性保持为不变即可。

""

“是否可见”属性与“打开Excel”的“是否可见”属性含义相

同,表示的是:在进行Word文档自动化操作时,是否显示Word软件

界面。

还有最后一条“输出到”属性,与“打开Excel”的“输出到”

属性含义类似,这里必须填写一个变量名,这个变量指代了我们打开

Word文档,后面在对该文档进行各种读取、修改操作的时候,仍

然需要把这个变量填入到相应命令的“文档对象”属性中,表明操作

是针对这个打开的文档进行的。比如,上图中我们在打开文档的时候,

“输出到”变量是,后续的Word操作命令,其“文档对象”属

objWord

性都需要填写

objWord

接下来,我们读取这个Word文档的内容。在“打开文档”命令之

后,插入一条“读取文档”命令,这条命令的属性如下图所示:

读取

Word文档

如上所述,“文档对象”属性和“打开文档”的“输出到”属性

一致,都为,表明我们是从刚才打开的文档中读取内容。

objWord

“输出到”属性填写了一个变量名表示把读取到的内容输出

sRet

到变量中。我们再添加一条“输出调试信息”命令,将的内

sRetsRet

容打印出来,运行后,可以看到如下结果:

读取Word文档的输出结果

我们打开原始文档来对比一下,可以看到:原始Word文档包括文

字、表格和图片,且文字带格式信息,“读取文档”命令会将文档中

的文字内容全部读取出来,但是暂时不支持读取文字的格式、表格的

状态和图片。

原始Word文档

“读取文档”命令操作的是整个文档,类似命令还有“重写文档”

“保存文档”、“文档另存为”、“关闭文档”、“获取文档路径”

等,这些命令都是对整个文档的操作。如果需要对文档进行更细粒度

的操作,就需要涉及到Word中一个重要的概念:焦点。所谓焦点,

指的是当前选中的区域,这块区域在Word中通常会高亮显示;如果

没有选中区域,当前光标位置即为焦点。即:

“焦点”=“选中”或“光标”

Word的操作大都针对焦点进行,例如,要改变一段文字的字体,首

先要选中这段文字,才能修改文字的大小、颜色、样式等;在Word

中插入文字、图片等内容,也需要先将光标移动到插入点。

我们来看看UiBot中如何实现焦点的设置和切换。插入一条“设

置光标位置”命令,这条命令可以将光标焦点设置到指定位置。这条

命令有三个属性:“文档对象”属性,就是上文所述的文档对象

objWord

“移动次数”属性需要与可选属性中的“移动方式”属性配合使用,

指的是光标按照“移动方式”移动多少次,“移动方式”属性有三个

选项,分别是“字符”、“行”和“段落”,分别代表光标向右移动

一个字符、向下移动一行和向下移动一个段落。在这里,“移动方式”

设置为“行”,“移动次数”设置为2,表示焦点设置为初始焦点下

移两行,也就是第三行。需要注意的是:移动次数不能为负数,也就

是说,光标不能向左移动、向上移动。

设置焦

我们再插入一条“选择行”命令,这条命令可以选中特定的行。

这条命令有三个属性:“文档对象”属性,就是上文所述的文档对象

objWord

;“起始行”属性和“结束行”属性限定了选中的范围,在这

里,“起始行”设置为1,“结束行”设置为2,表示选中第1行到

2行,一共2行。

选择行

但是,在实际的应用中,单独使用“设置光标位置”命令和“选

择行”命令进行光标焦点的设定,实际效果并不好,这是为什么呢?

原来,Word虽然是一个所见即所得的可视化图文混排软件,但是Word

中同样存在一些看不见的格式标记,这些格式表示或多或少会影响

Word文档中“字符”、“行”和“段落”的计算,导致焦点定位不

准的问题。那如何来解决这个问题呢?这里教给大家一个小技巧:

先,我们在Word文档中,需要插入或者编辑的地方设置一个特殊的

标记,例如插入名称字段,就设置在Name;然后,使用“查找文本

后设置光标位置”命令,这条命令有两个关键属性,一个是“文本内

容”属性,填写前面的Name即可,一个是相对位置属性,选择“选

中文本”,这样就可以找到Name这个标记并选中这个标记的内容;

最后,使用“写入文字”命令将选中内容替换成需要的内容。我们可

以在Word文档中多设置几个这样的特殊标记,然后重复利用“查找

文本后设置光标位置”命令,达到Word文档填写的目的。

继续前述内容,将光标移动到指定位置或者选中指定内容后,就

可以执行具体的编辑操作了,包括插入内容、读取内容、删除内容、

设置内容的格式、剪切/复制/粘帖等等,我们这里以“设置文字大小”

命令为例。“选择行”命令之后,插入一条“设置文字大小”命令。

这条命令有两个属性:“文档对象”属性,就是上文所述的文档对象

objWord

;“字号大小”属性指定选中文字的字号大小,在这里,“字

号大小”设置为9,表示选中文字的字号大小统一设置为9

设置文

字大小

5.3 Outlook自动化

Outlook是微软公司的主打邮件传输和协作客户端产品,办公软

件套装的组件之一。如下图,正在使用Outlook2019编写一封新邮件:

Outlook

使用UiBot自动化操作Outlook客户端,可直接使用“发送邮件”

“获取邮件列表”、“回复邮件”、“下载附件”这些命令,与用户

平时在Outlook客户端上操作邮件的习惯基本相同,填写发件人、

件人、标题、正文、附件等信息即可,只是填写“发件人邮箱”“邮

箱地址”属性时,该邮箱地址一定事先在Outlook中绑定好(支持绑

定多个邮箱地址)。

发送邮件

收取邮件

另外比较低频的邮件操作也支持,如“移动邮件”、“删除邮件”

命令。需要注意的是,当前自动化命令主要适配Outlook2010

201320162019版本。

5.4 IBM Notes 自动化

IBM Notes 9.0

Outlook一样,UiBot还支持对IBM Notes 邮件客户端进行自

动化操作,发送邮件、回复邮件、获取邮件、下载附件这些操作同样

直接使用“发送邮件”、“回复邮件”、“获取邮件列表”、“下载

附件”这几个命令就可以实现;前提条件一样,都需要事先绑定发件

人邮箱,而不同点在于配置属性:IBM Notes 不需要填写发件人邮箱,

但存在“密码模式”,所有自动化命令都要配置密码,包括“移动邮

件”、“删除邮件”命令。

发送邮件获取邮

当前自动化命令,对IBM Notes版本也存在一定要求,主要适配

9.0.111.1的中文版。

5.5 浏览器自动化

浏览器的自动化是软件自动化的一个重要组成部分,从特定上的

网站上抓取数据、自动化操作Web形态的业务系统都需要基于浏览器

进行自动化操作。

首先,我们需要打开一个浏览器,这个功能是通过“启动新的浏

览器”命令来实现的。当然,如果计算机此时已经打开了一个浏览器,

我们也可以直接利用这个打开的浏览器进行后续操作,此时,只需要

一条“绑定浏览器”命令,其效果和“启动新的浏览器”命令是一样

的。

启动新

的浏览器

“启动新的浏览器”命令的属性如下:“浏览器类型”属性指定

启动哪个浏览器。UiBot目前支持IE浏览器、Google Chrome浏览器、

火狐浏览器、UiBot自带浏览器四种浏览器,其中,前三种浏览器需

要你的电脑提前安装好,UiBot自带浏览器是UiBot Creator 5.0

本后自带的浏览器。在这里,我们选择的是“UiBot Brower”,即

UiBot自带的浏览器。相比其它三种浏览器,UiBot浏览器有如下优

点:第一、无需安装任何浏览器扩展,即可选取目标元素(Google

ChromeFirefox都需要安装扩展,在这个过程中,有时候会有一

些意外的情况发生,例如被杀毒软件拦截等);第二、UiBot浏览器

可以选取到跨域网页中的目标元素(使用其它浏览器登录网易、QQ

等邮箱时无法找到用户名和密码输入框);第三、UiBot浏览器可以

直接调用所访问页面内的JavaScript方法。基于上述优点,我们推

荐优先使用UiBot浏览器。当然,也有些比较特殊的网站,只能使用

特定的浏览器才能正确打开和操作,比如某些国内银行网站,某些政

府网站等,都只能使用IE浏览器才能正确打开和操作,这个时候,

“浏览器类型”属性就只能选择“IE浏览器”了。

“打开链接”属性表示打开浏览器时,同时打开哪个网址。在这

里填写的是,表示打开浏览器时,同时打开百度网站。当

""

然,这里也可以暂时不填,后面再使用“打开网页”命令单独打开一

个网址。

“超时时间”属性的意思是,如果出现异常情况,比如浏览器找

不到,或者指定的链接打不开时,UiBot会反复进行尝试,直到超过

指定的时间,也就是“超时时间”。

有两个可选属性也比较常用:一个是“浏览器路径”属性。有时

候,我们会在同一台电脑上安装了两个不同版本的浏览器软件,这时,

我们可以通过指定“浏览器路径”属性来打开某个特定版本的浏览器。

如果不指定这个属性,系统会去浏览器默认安装目录下查找并启动浏

览器软件;另一个是“浏览器参数”属性,我们知道,浏览器其实是

非常强大的,浏览器除了能够默认启动外,还可以通过自定义启动参

数,包括默认打开某些网页、展现方式(全屏等)、启用或禁用某些

功能等,来启动一个个性化的浏览器。具体每种浏览器可以配置哪些

启动参数,请参见相应的说明文档。

启动浏览器后,就可以针对浏览器及浏览器中显示的网页进行一

系列的操作,我们可以浏览网页、在网页中输入文字、点击网页中的

链接和按钮等。比如,打开了百度网站,我们可以在百度主页的输入

框中,输入UiBot并点击“百度一下”按钮,就可以得到UiBot

在百度中的搜索结果。这些操作都可以通过前面章节的“有目标命令”

完成,搜索结果也可以通过“数据处理”命令进行处理,完成数据抓

取、数据分析等功能,这一块功能将在后续教程“数据处理”中详细

讲解,这里就不再展开。