如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel
![如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel](https://static001.geekbang.org/infoq/1d/1d878bfa21987fd8d913c69ea76063ef.jpeg)
机器人流程自动化 (Robotic Process Automation,简称 RPA) 是一种允许用户将企业重复的、基于规则的业务流程进行自动化的解决方案。
与需要将流程步骤硬编码
到系统中的传统自动化解决方案不同,RPA 利用了当今机器学习和人工智能的最新成果,通过观察真实用户完成流程的方式,来了解如何执行任务的自动化。
要想了解 RPA 解决方案的工作原理,可以把它想象成录制一个宏。一旦录制完成,RPA 机器人可以自主执行任务,不但能够用于复杂任务,而且可以处理任务中的异常情况,不断积累知识以响应持续变化的输入条件,利用被自动化的应用的 UI 更改。
一个更易于理解的 RPA 工作原理示例,可以考虑电子邮件和文本消息应用程序中的预测文本功能。 当我们键入电子邮件、文本等时,该应用程序会记住我们使用的某些语法和单词,然后在将来键入时自动根据这些提出建议。
RPA 所有做出的这些努力,都为最终用户从繁琐,重复,乏味的体力活中摆脱出来,让其可以进行技术附加值更高的其他事情,这也是智慧企业所倡导的 更聪明地工作,而不是更努力地工作
的一个指导方针。
除了常见的使用编程语言操作 Excel 文件之外,SAP 新发布的 SAP Intelligent Robotic Process Automation(简称 SAP iRPA),提供了强大的企业级自动化流程解决方案,善加利用,可以在不需要编程的情况下,像使用编程语言一样灵活地操作 Excel.
我们来看个具体而又简单的例子,用 SAP Intelligent Robotic Process Automation 操作一个 Excel 文件,往里面的单元格写入一个字符串,设置背景色然后关闭。
打开 SAP Intelligent Robotic Process Automation Desktop Studio,导入 SAP 预置的操作 Excel 的 nodejs 脚本库文件。
![](https://static001.geekbang.org/infoq/f3/f3c50eb199f7a9af55df913387fccb50.png)
在库文件里选择 Excel Integration. 从下图能发现,SAP iRPA 除了 Excel 之外,也支持 Office 里其他应用比如 Word 和 Outlook.
![](https://static001.geekbang.org/infoq/ec/eca35dfb6223d3036927a04cb5a489f4.png)
新建一个名叫 jerryExcel 的 workflow,在工作流的 activities 面板里输入 seq,找到类型为 Sequence 的 Flow 控件。该控件允许我们在工作流里定义一系列顺序执行的步骤。
![](https://static001.geekbang.org/infoq/84/8498faa7009f71e4c99037b8eec98744.png)
把 Sequence 控件拖拽到工作流编辑区域里,双击,就可以定义需要执行的详细步骤了。
![](https://static001.geekbang.org/infoq/d6/d678bd880f537e52fb442720a8165ee7.png)
Excel Lib 里预置了很多围绕 Excel 进行的操作,如 Init Excel,Open Excel,Close Excel 等等,每个操作对应一段 nodejs 代码。
![](https://static001.geekbang.org/infoq/1d/1dded06c2890638d4e1ed2f251d83a47.png)
比如把 Init Excel 拖拽到 Sequence 控件的 Activities 列表里之后,一旦保存,会立即看到自动生成的 nodejs 代码。Excel Lib 里每个 step,都对应一段 nodejs 代码。如此一来,即使 SAP Intelligent Robotic Process Automation Desktop Studio 的使用者没有编程基础,也能开发出能操作 Excel 的自动化工作流。
![](https://static001.geekbang.org/infoq/e9/e9213cb8f6c414962c4f6c8839fec1dc.png)
上图的 Init Excel 步骤是所有操作 Excel 的工作流都必须执行的一个初始化步骤。初始化完毕后,把 Open Excel 这个步骤拖拽到 Sequence Activities 里,指定要打开的 Excel 文件路径,在 Desktop Studio 里有红色提示。
![](https://static001.geekbang.org/infoq/ad/ad1d56be3fc6d99b43533d20f471c305.png)
把本地 Excel 文件的绝对路径维护进去:
![](https://static001.geekbang.org/infoq/b0/b05df72e1166334d69968dad81636389.png)
![](https://static001.geekbang.org/infoq/f2/f215f37da0372c384c488e09fe54f901.png)
第三步,设置打开的 Excel 第 1 行,第 1 列的值为'Hello Jerry':
![](https://static001.geekbang.org/infoq/ae/ae80ee3f0eb01634cf30b7d67d9bfa47.png)
第四步,设置第 1 行第 1 列的背景色:
![](https://static001.geekbang.org/infoq/c3/c3b84a855d3e8bc231c5647f7f76d692.png)
将修改之后的 Excel 另存成另一个文件。执行这个项目,就会在 temp 文件夹里看到另一个 Excel 文件。
![](https://static001.geekbang.org/infoq/51/510cce4d03f84000ca31a1cf6be87256.png)
这个例子非常简单,让我们来看看它的工作原理。切换到 Script 面板,在第 45 行打开 Excel 的代码处设置断点,然后单步调试:
![](https://static001.geekbang.org/infoq/e2/e24cd419d1f5472b14ed1f98e78beac6.png)
断点一旦触发,我们能观察到任务栏里出现一个 Excel 的应用窗口提示,没有显示任何内容:
![](https://static001.geekbang.org/infoq/c8/c8dfea7c910cbe8131f2dc7f3d3d14fe.png)
在任务管理器能看到该应用通过参数/automation -Embedding 的方式启动:
![](https://static001.geekbang.org/infoq/07/077d7e104800c07cb653489a58e325e7.png)
我们想单步调试进 ctx.excel.file.open 方法内,发现断点并没有在 open 方法内停下来,而是直接执行完这个方法,此时任务栏上的应用标题从 Excel 更换成了 open 方法打开的文件名:1.xlsx.
![](https://static001.geekbang.org/infoq/99/9926a12fe90a5232e4b98fd3d35c4f9f.png)
从以上任务管理器里观察到的/automation 和 embedding 参数,我们已经能判断出,SAP iRPA 操作 Excel 的实现原理,和 Jerry 文章 使用 ABAP 操作 Excel 的几种方法 中提到的第一种方法,即通过 OLE 方式操作 Excel 是一致的。
如果非要刨根究底,可以到 SAP iRPA SDK 安装目录下,打开 excel.js 文件,找到 open 方法的实现,发现其调用了_excelApp 对象的 WorkBooks.Open 方法:
![](https://static001.geekbang.org/infoq/24/2403a02ac44b379f6d8b0677f94ded3f.png)
而_excelApp 对象,在 initialize 方法里通过 GetObject 从 OLE 对象 Excel.Application 中获取:
![](https://static001.geekbang.org/infoq/ef/efcf66e0bed595a70d540cb3875bca1e.png)
还记得 Jerry 文章 使用 ABAP 操作 Excel 的几种方法 里提到的 ABAP OLE 实现源代码么?也是采用同样的方式获取 Excel 应用对象,连编码方式都如出一辙。
![](https://static001.geekbang.org/infoq/b1/b1932e73ff6b12d6ca8f3dba29f8526a.png)
![](https://static001.geekbang.org/infoq/ea/ea9a0fb918c7415f041ccf014ad82f6d.png)
既然已经聊到 JavaScript 操作 Excel 的话题了,就顺便提一句,目前另一种流行的 JavaScript 操作 Excel 的开源库,即 Node-xlsx,原理是基于 Office Open XML 协议去解析 Excel 文件,ABAP 也有对应的基于 Office Open XML 的实现:CL_XLSX_DOCUMENT.
![](https://static001.geekbang.org/infoq/27/277482d49c5b7f372261eaa8bf94486b.png)
这种方式较之 SAP iRPA 采用的 OLE 解决方案,优势在于避免了对 Excel 应用的依赖,多用于服务器端对 Excel 的处理任务。
总结
本文首先给出了企业级 Robotic Process Automation 解决方案(简称 RPA)的诞生原因和适用场合,接着以 Excel 文件的自动化操作为例,详细介绍了 SAP iRPA 解决方案的使用步骤。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/4aafff3e291cb21d47c8408c9】。文章转载请联系作者。
评论