这篇文章原本不在我计划以内,由于最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工做中从没遇到过须要用ABAP操做Excel的需求,所以也没有太多技术实现细节能够分享给你们,只能泛泛写一些。git
用ABAP操做Excel这个需求算是比较常见,因此Jerry但愿这篇文章能起到抛砖引玉的效果,在这个话题上有多年工做经验的朋友们,欢迎留言,指出Jerry文章中不足或者错误之处。github
在SAPGUI里根据关键字OLE搜索,能找到经过ABAP操做Excel的一种办法:算法
这段文档说的比较清楚,微软的Word和Excel这种Office应用,提供了一种所谓automation的接口,暴露的公有类的方法和属性能够被其余应用消费。编程
做为ABAP应用开发人员,咱们经过调用OLE对象的方法CALL METHOD, GET PROPERTY,SET PROPERTY等来访问微软Word和Excel的automation接口,代码看起来像这样:windows
上面这个函数RH_START_EXCEL_DATA_OLE调用微软Excel的automation接口,新建一个Excel workbook,而后准备把ABAP内表里的数据写到Excel里。微信
你也许会问,我咋知道Excel里有哪些公有的类和方法能够被ABAP调用呢?编程语言
在Excel里点击右键,选择View Code:函数
打开Microsoft Visual Basic Object Brower,全部可用的类和方法都列在这里了,上面ABAP代码第218行调用的workbook的open方法在列表里也能找到。工具
这个解决方案只在windows平台有效,而且须要运行SAPGUI的Presentation Server上安装有微软的Excel应用。区块链
咱们采用OLE的方式操做Excel时,打开Windows操做系统的任务管理器,会发现一个以/automation -Embedding参数启动的Excel进程。
这里的-Embedding参数,来自OLE的全称:Object Linking and Embedding里的一部分。OLE是微软的一项很是古老的技术了。
微软和SAP两位大佬,Bill Gates和Hasso Plattner 1993年的照片:
关于OLE,Jerry知道的就这么点了,在SAP研究院里现在咱们仍是会和微软的技术打交道,好比微软的Azure.
若是Jerry没记错的话, 微软Office从2007版本开始, 采用新的支持Office Open XML标准的格式来管理Excel和Word等文件。Jerry 2014年在SAP成都研究院CRM开发团队负责CRM Document Builder这个模块,当时编写过使用ABAP操做Word文档的代码。
以Word为例,下图是我建立了一个最简单的Word文档,包含了一个Header区域,一个由三行彩色文字组成的段落,还有一张图片。
咱们把这个Word文档的扩展名从.docx改为.zip, 而后双击,就能够用解压软件好比winrar打开。
因而发现这一个最简单的按照Office Open XML协议实现的Word文档,实际上由如此多的xml和文件夹构成。
使用SAP标准的类CL_DOCX_DOCUMENT读取Word文件内容:
上述代码的简要说明:
(1) 将word文档的二进制内容传入方法cl_docx_document=>load_document,获得一个文档对象引用,而后就能够借助该对象引用调用各类方法了。
(2) word文档的建立者,建立时间,最后修改时间等信息都存储在所谓的“Core property part”内,能够经过方法lo_document->get_corepropertiespart得到"Core property part"的引用,再使用该引用调用方法get_data得到实际内容。
下图是get_data返回的内容的一个例子,能够看出是xml格式。
(3) 如今咱们准备读取Word文档的正文了。使用方法lo_document->get_maindocumentpart获得Word文档正文,文字的字体类型,颜色也包含在内。以下图所示:
(4) Word文档里插入的图片的二进制内容固然也是能够读取出来的。使用方法:lo_image_parts->get_part返回。
Excel的例子我没有动手作过,不过原理相似,你们能够用开发包S_OOXML_CORE里的CL_XLSX_DOCUMENT来操做格式为xlsx的Excel文档。
除此以外,还有一个著名的开源项目,abap2xlsx, Jerry没有试过,感兴趣的朋友能够试试。
最后,你们在SE24里使用关键字XSLX以及SE38里搜索_OLE,
能够从搜索列表里选一些点进去,参考SAP标准程序是如何操做Excel文档的。
但愿这些内容对你们有用,感谢阅读。
更多阅读
要获取更多Jerry的原创文章,请关注公众号"汪子熙":