这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些。
用ABAP操作Excel这个需求算是比较常见,所以Jerry希望这篇文章能起到抛砖引玉的效果,在这个话题上有多年工作经验的朋友们,欢迎留言,指出Jerry文章中不足或者错误之处。
在SAPGUI里根据关键字OLE搜索,能找到通过ABAP操作Excel的一种办法:
这段文档说的比较清楚,微软的Word和Excel这种Office应用,提供了一种所谓automation的接口,暴露的公有类的方法和属性可以被其他应用消费。
作为ABAP应用开发人员,我们通过调用OLE对象的方法CALL METHOD, GET PROPERTY,SET PROPERTY等来访问微软Word和Excel的automation接口,代码看起来像这样:
上面这个函数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的ABAP, Java和JavaScript乱炖
- ABAP开发人员未来应该学些什么
- Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
- Jerry的ABAP原创技术文章合集
- 300行ABAP代码实现一个最简单的区块链原型
- 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
- 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C语言和ABAP
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
- 我用ABAP做过的那些无聊的事情
- 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
- 使用Visual Studio Code编写和激活ABAP代码
- 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
- 在SAP云平台ABAP编程环境上编写第一段ABAP程序
- SAP官方发布的ABAP编程规范
- ABAP Code Inspector那些隐藏的功能,您都知道吗?
- 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
- ABAP Netweaver体内的那些寄生式编程语言
- 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
- 云端的ABAP Restful服务开发
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
- 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
- Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
- Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
- SAP云平台上的ABAP编程环境里如何消费第三方服务
- ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
- SAP云平台里的三叉戟应用
- 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
- SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
- 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
- ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
- 一段让人瑟瑟发抖的ABAP代码
- 昨日万圣节ABAP怪兽级代码谜团,公布答案啦
- 介绍一种在ABAP内核态进行内表高效拷贝的方法
- 使用SAP Cloud Application Programming模型开发OData的一个实际例子
- 当ABAP遇见普罗米修斯
- 使用ABAP绘制可伸缩矢量图
- ABAP开发环境语法高亮的那些事儿
- SAP错误消息调试之七种武器:让所有的错误消息都能被定位
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
本文将详细介绍几种常见的用于读取Excel文件的方法,并针对如何处理超过256个字符的单元格内容提供解决方案。 #### 二、SAP提供的标准函数模块 SAP提供了几个标准的函数模块来帮助开发者读取Excel文件并将其转换为...
标题“批量下载BOM到EXCEL-ABAP代码”表明该代码的主要功能是使用ABAP语言将物料清单(BOM)批量下载到EXCEL表格中。 描述分析 描述“批量下载BOM到EXCEL-ABAP代码”与标题相同,表明该代码的主要功能是批量下载...
ABAP2XLSX是一个基于SAP ABAP编程语言的开源库,专为在SAP环境中操作Microsoft Office Excel文件而设计。...总的来说,ABAP2XLSX为SAP系统的Excel操作提供了一种强大而便捷的解决方案,极大地扩展了ABAP编程的潜力。
3. 对Excel的操作:在ABAP中,可以使用OLE技术来对Excel进行操作,例如创建工作簿、工作表、单元格,设置单元格的值、格式等。 4. 内部表的应用:在ABAP中,内部表可以用来存储要导出到Excel中的数据。 5. CALL ...
ABAP 支持的 Excel 文件格式通常是 .xls 和 .xlsx,这两种格式在结构上有区别。对于较旧的 .xls 格式,ABAP 使用 `CL_XLS_FILE` 类;而对于 .xlsx(基于 Office Open XML 格式),则使用 `CL_XLSM_FILE`。 6. **...
ABAP(Advanced Business Application Programming)是SAP系统中的一种编程语言,主要用于开发和定制企业级业务应用程序。本套“ABAP培训全套教材”是针对初学者和内部员工设计的,内容涵盖ABAP的基础到进阶知识,...
本文将深入探讨SAP ABAP ALV技术的核心概念、使用场景及其实现过程。 一、ALV技术概述 ALV技术最初是为了改进传统的SAP List Reports而开发的,传统的List Reports在显示大量数据时性能较低且用户交互性差。ALV...
在SAP系统中,ABAP(Advanced Business Application Programming)是一种编程语言,用于开发和定制企业级应用程序。在本例中,我们关注的是批量创建元素(数据元素)的程序,这通常是在进行数据模型设计或者系统配置...
每种数据类型都有其特定的用途和操作方式。 - 变量与常量:变量用于存储数据,而常量则是在程序运行期间不可更改的值。ABAP允许开发者定义不同类型的变量和常量,并通过赋值语句进行初始化。 - 控制结构:ABAP提供...
这里调用了 `KCD_EXCEL_OLE_TO_INT_CONVERT` 函数模块,它能将 Excel 文件中的数据导入到 ABAP 系统内部,以便进一步处理。此过程还包括对导入数据的遍历操作,通过循环遍历 `L_INTERN` 表中的每一行数据,并将其...
整体上,这篇文档为SAP List Viewer(ALV)在Web Dynpro ABAP中的使用提供了一个详尽的参考,它覆盖了从基础的组件集成到复杂的配置和导出操作的各个方面。通过这些知识点,开发者可以有效地在Web Dynpro ABAP应用程序...
BDC(Batch Data Conversion)是一种特殊的技术,在 SAP 系统中,它可以将重复的数据输入操作自动化,以提高工作效率和减少人工操作错误。该技术通过记录用户的一次业务操作的所有过程,然后通过程序来模拟用户的...
ABAP程序主要包括以下几种类型: 1. 报表:最常见的ABAP程序形式,用于展示数据,如财务报表。 2. 接口:包括RFC/BAPI、iDoc和Web服务,它们基于Function Module,用于不同系统间的通信。 3. 增强:对SAP标准程序的...
- **Data Set**:数据集的操作方法。 - **WS_DOWNLOAD**:使用WS_DOWNLOAD功能下载文件。 - **GUI_DOWNLOAD with Popup File Name Request**:使用GUI_DOWNLOAD并弹出文件名请求对话框。 #### 3.4 宏 - **Macros**...
ABAP LIST VIEWER(ALV)是一种标准化、简单化R/3系统中的表单浏览器,能够提供给用户一个统一的表单格式和用户接口。ALV可以显示简单表单(SIMPLE LIST)和层次表(SEQUENTIAL LIST)。简单表单包含一系列不分层次...
### SAP ABAP Batch Input 应用详解 #### 第一章 ECATT/SCAT 说明 ##### 第一节 ECATT 与 SCAT 区别 在SAP系统中,ECATT (Enhanced ...无论采用哪种方法,都需要仔细规划和实施,以确保数据的准确性和完整性。
在SAP OLE开发中,通常有以下几种操作Excel的方式: 1. OLE接口:通过SAP的OLE接口,ABAP程序可以直接创建和操作Excel对象。这包括创建新的工作簿,填充数据,设置单元格格式,以及应用公式和图表。 2. DOI...
SAP ALV Grid 是一种灵活的工具,用于显示列表,并提供了常见的列表操作通用函数,可以通过自定义选项来增强其功能。ALV Grid 控件可以创建非层次的友好交互式报表,是一个基于客户端的控件。 ALV Grid 控件的功能...
SAP BDC(Batch Data Conversion)技术是一种在SAP系统中高效、自动化处理大量数据录入的方法。当需要在系统间迁移数据或者批量更新大量记录时,BDC技术提供了方便的解决方案,避免了手动操作的繁琐和错误可能性。 ...
SAP DBC (Database Connection) 实例主要涉及的是在SAP系统中批量处理数据的方法,尤其是使用BDC(Batch Data Conversion)技术。BDC技术是一种高效的数据导入工具,尤其适用于需要重复执行相同操作但数据不同的场景...