测试
全部博文(931)
分类: 架构设计与优化
2020-02-08 09:26:01
今天是鼠年正月十二。这是Jerry鼠年的第11篇文章,也是汪子熙公众号总共第210篇原创文章。
之前Jerry的文章 使用ABAP操作Excel的几种方法,介绍的是通过ABAP这门编程语言去操作Excel的方法。
除了编程语言之外,SAP新发布的SAP Intelligent Robotic Process Automation(简称SAP iRPA),提供了强大的企业级自动化流程解决方案,善加利用,可以在不需要编程的情况下,像使用编程语言一样灵活地操作Excel.
我们来看个具体而又简单的例子,用SAP Intelligent Robotic Process Automation操作一个Excel文件,往里面的单元格写入一个字符串,设置背景色然后关闭。
在动手做这个例子之前,你也许需要先阅读这两篇文章,以了解SAP iRPA的上下文。
* [SAP智能机器人流程自动化解决方案](SAP智能机器人流程自动化解决方案)
* [使用SAP iRPA Studio创建的本地项目,如何部署到SAP云平台上?](使用SAP iRPA Studio创建的本地项目,如何部署到SAP云平台上?)
打开SAP Intelligent Robotic Process Automation Desktop Studio,导入SAP预置的操作Excel的nodejs脚本库文件。
在库文件里选择Excel Integration. 从下图能发现,SAP iRPA除了Excel之外,也支持Office里其他应用比如Word和Outlook.
新建一个名叫jerryExcel的workflow,在工作流的activities面板里输入seq,找到类型为Sequence的Flow控件。该控件允许我们在工作流里定义一系列顺序执行的步骤。
把Sequence控件拖拽到工作流编辑区域里,双击,就可以定义需要执行的详细步骤了。
Excel Lib里预置了很多围绕Excel进行的操作,如Init Excel,Open Excel,Close Excel等等,每个操作对应一段nodejs代码。
比如把Init Excel拖拽到Sequence控件的Activities列表里之后,一旦保存,会立即看到自动生成的nodejs代码。Excel Lib里每个step,都对应一段nodejs代码。如此一来,即使SAP Intelligent Robotic Process Automation Desktop Studio的使用者没有编程基础,也能开发出能操作Excel的自动化工作流。
上图的Init Excel步骤是所有操作Excel的工作流都必须执行的一个初始化步骤。初始化完毕后,把Open Excel这个步骤拖拽到Sequence Activities里,指定要打开的Excel文件路径,在Desktop Studio里有红色提示。
把本地Excel文件的绝对路径维护进去:
第三步,设置打开的Excel第1行,第1列的值为'Hello Jerry':
第四步,设置第1行第1列的背景色:
将修改之后的Excel另存成另一个文件。执行这个项目,就会在temp文件夹里看到另一个Excel文件。
这个例子非常简单,让我们来看看它的工作原理。
切换到Script面板,在第45行打开Excel的代码处设置断点,然后单步调试:
断点一旦触发,我们能观察到任务栏里出现一个Excel的应用窗口提示,没有显示任何内容:
在任务管理器能看到该应用通过参数**/automation -Embedding**的方式启动:
我们想单步调试进ctx.excel.file.open方法内,发现断点并没有在open方法内停下来,而是直接执行完这个方法,此时任务栏上的应用标题从Excel更换成了open方法打开的文件名:1.xlsx.
从以上任务管理器里观察到的/automation和embedding参数,我们已经能判断出,SAP iRPA操作Excel的实现原理,和Jerry文章 [**使用ABAP操作Excel的几种方法**](使用ABAP操作Excel的几种方法) 中提到的第一种方法,即通过OLE方式操作Excel是一致的。
如果非要刨根究底,可以到SAP iRPA SDK安装目录下,打开excel.js文件,找到open方法的实现,发现其调用了_excelApp对象的WorkBooks.Open方法:
而_excelApp对象,在initialize方法里通过GetObject从OLE对象Excel.Application中获取:
还记得Jerry文章 [使用ABAP操作Excel的几种方法](使用ABAP操作Excel的几种方法) 里提到的ABAP OLE实现源代码么?也是采用同样的方式获取Excel应用对象,连编码方式都如出一辙。
既然已经聊到JavaScript操作Excel的话题了,就顺便提一句,目前另一种流行的JavaScript操作Excel的开源库,即**Node-xlsx**,原理是基于Office Open XML协议去解析Excel文件,ABAP也有对应的基于Office Open XML的实现:**CL_XLSX_DOCUMENT**.
这种方式较之SAP iRPA采用的OLE解决方案,优势在于避免了对Excel应用的依赖,多用于服务器端对Excel的处理任务。
至此,采用SAP技术操作Excel的方案大家族里,又增添了一位新的成员:SAP iRPA. 希望本文对大家开阔眼界有所帮助,感谢阅读。
* [Jerry的ABAP, Java和JavaScript乱炖](Jerry的ABAP, Java和JavaScript乱炖)
* [ABAP开发人员未来应该学些什么](ABAP开发人员未来应该学些什么)
* [Jerry 2017年的五一小长假:](Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现)[8种经典排序算法的ABAP实现](Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现)
* [Jerry的ABAP原创技术文章合集](Jerry的ABAP原创技术文章合集)
* [300行ABAP代码实现一个最简单的区块链原型](300行ABAP代码实现一个最简单的区块链原型)
* [使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数](使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数)
* [在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务](在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务)
* [ABAP vs Java, 蛙泳 vs 自由泳](ABAP vs Java, 蛙泳 vs 自由泳)
* [聊聊C语言和ABAP](聊聊C语言和ABAP)
* [动手使用ABAP Channel开发一些小工具,提升日常工作效率](动手使用ABAP Channel开发一些小工具,提升日常工作效率)
* [我用ABAP做过的那些无聊的事情](我用ABAP做过的那些无聊的事情)
* [不喜欢SAP GUI?](不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧)[那试试用Eclipse进行ABAP开发吧](不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧)
* [使用Visual Studio Code编写和激活ABAP代码](使用Visual Studio Code编写和激活ABAP代码 (上))
* [你的ABAP程序给佛祖开过光么?](你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧)[来试试Jerry这个小技巧](你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧)
* [在SAP云平台ABAP编程环境上编写第一段ABAP程序](在SAP云平台ABAP编程环境上编写第一段ABAP程序)
* [SAP官方发布的ABAP编程规范](SAP官方发布的ABAP编程规范)
* [ABAP Code Inspector那些隐藏的功能,您都知道吗?](ABAP Code Inspector那些隐藏的功能,您都知道吗?)
* [还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧](还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧)
* [ABAP Netweaver体内的那些寄生式编程语言](ABAP Netweaver体内的那些寄生式编程语言)
* [从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀](从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀)
* [云端的ABAP Restful服务开发](云端的ABAP Restful服务开发)
* [如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务](如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务)
* [使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输](使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输)
* [30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用](30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用)
* [Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现](Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现)
* [Jerry带您了解Restful ABAP Programming模型系列之三:](Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试)[云端ABAP应用调试](Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试)
* [SAP云平台上的ABAP编程环境里如何消费第三方服务](SAP云平台上的ABAP编程环境里如何消费第三方服务)
* [ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了](ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了)
* [学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景](学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景)
* [SAP云平台里的三叉戟应用](SAP云平台里的三叉戟应用)
* [如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用](如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用)
* [SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?](SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?)
* [有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?](有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?)
* [ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了](ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了)
* [利用ABAP 740的新关键字REDUCE完成一个实际工作任务](利用ABAP 740的新关键字REDUCE完成一个实际工作任务)
* [一段让人瑟瑟发抖的ABAP代码](一段让人瑟瑟发抖的ABAP代码)
* [昨日万圣节ABAP怪兽级代码谜团,公布答案啦](昨日万圣节ABAP怪兽级代码谜团,公布答案啦)
* [介绍一种在ABAP内核态进行内表高效拷贝的方法](介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现)
* [使用SAP Cloud Application Programming模型开发OData的一个实际例子](使用SAP Cloud Application Programming模型开发OData的一个实际例子)
* [当ABAP遇见普罗米修斯](当ABAP遇见普罗米修斯)
* [使用ABAP绘制可伸缩矢量图](使用ABAP绘制可伸缩矢量图(SVG))
* [ABAP开发环境语法高亮的那些事儿](ABAP开发环境语法高亮的那些事儿)
* [SAP错误消息调试之七种武器:](SAP错误消息调试之七种武器:让所有的错误消息都能被定位)[让所有的错误消息都能被定位](SAP错误消息调试之七种武器:让所有的错误消息都能被定位)
* [使用ABAP操作Excel的几种方法](使用ABAP操作Excel的几种方法)
* [SAP GUI里的收藏夹事务码管理工具](SAP GUI里的收藏夹事务码管理工具)
* [SAP GUI和Windows注册表](SAP GUI和Windows注册表)
* [有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中](有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中)
* [ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼](ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼)
* [实现ABAP条件断点的三种方式](实现ABAP条件断点的三种方式)
* [使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈](使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈)