SAP|SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析
本文是这篇文章SAP ABAP 处理 Excel 的标准函数 TEXT_CONVERT_XLS_TO_SAP 介绍的后续。
在本地新建一个 excel 文件,内容如下:
【SAP|SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析】
文章图片
使用下面的 ABAP 代码进行解析:
REPORT z.TYPES: BEGIN OF ty_data,
field1 TYPE string,
field2 TYPE string,
END OF ty_data.TYPES: tt_data TYPE TABLE OF ty_data.DATA: lt_data TYPE tt_data,
lt_rawTYPE truxs_t_text_data.CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header= abap_false
i_tab_raw_data= https://www.it610.com/article/lt_raw
i_filename='C:\temp\1.xlsx'
TABLES
i_tab_converted_data = https://www.it610.com/article/lt_data
EXCEPTIONS
conversion_failed= 1
OTHERS= 2.WRITE:/ sy-subrc.
执行之后,excel 的数据,存储到 ABAP 变量
lt_data
里。单步调试:调用 get_spreadsheet_interface, 输入参数为字符串
Excel.Sheet
, 其他 changing 参数都是 initial,这些参数都是在该 subroutine 内部初始化:文章图片
这里调用静态方法
c_oi_container_control_creator=>get_container_control
,初始化 OLE container
:文章图片
可以看到走的是 ActiveX 技术:
文章图片
OLE container 初始化成功:
C_OI_CONTAINER_CONTROL
文章图片
接着创建一个名为
TRUX_CONTAINER
的 custom container:文章图片
获得 Excel 应用的代理类(
document_proxy
):文章图片
使用代理类打开本地 excel 文件:FILE://C:\temp\1.xlsx
文章图片
这里的本质是,向本地电脑安装的 excel 执行文件,发送一个
OpenDocument
的命令:文章图片
这里通过普通的单步调试,无法进入 CALL_METHOD 内部:
文章图片
需要打开 ABAP 调试器的系统程序调试功能(System Debugging On/Off):
文章图片
文章图片
通过 SAPGUI 的 OLE 容器,发送
OpenDocument
的命令:文章图片
凡是在 ABAP 调试器里以蓝色显示的调用栈,证明是 SAP ABAP 的系统程序,而非应用程序:
文章图片
在函数
AC_CALL_METHOD
内部,调用的就是用 C/C++ 语言编写的 kernel 函数了,这些函数无法再在 ABAP 调试器里单步调试。文章图片
以上就是 ABAP 通过给 Excel.exe 发送
OpenDocument
打开 Excel 文件的实现过程。我们安装一个名叫 Process Explorer 的软件。
因为我们源代码里,指定的 TABLES 参数的数据类型,其行项目是一个包含 field1 和 field2 两个字段的结构,因此函数内部智能地决定读取第一张 spreadsheet 的前两列,读取行数的范围为 100:
文章图片
ABAP 通过所谓的 range,来描述待读取 Excel 数据的范围。
这里代码第 88 行 l_range_list 变量,内容如下:
文章图片
文章图片
代码第 93 行的
get_ranges_data
方法执行完毕之后,range 指定范围的数据,就读取到内表 l_table_range 里了:文章图片
如下图所示:
文章图片
这里采取的仍然是通过 OLE 代理对象,向本地 excel.exe 发送命令的方式来完成:
文章图片
我们下载一个名叫 Process Explorer的进程管理工具,执行后,在路径 wininit.exe-services.exe-svhost.exe 下面,能发现 SAPGUI 里执行上述 ABAP 程序,所启动的 excel.exe 进程:
文章图片
双击上图图例4,能看到 excel.exe 的启动参数
-Embedding
,证明 ABAP 程序确实通过 OLE 技术同本地的 Excel 程序交互。文章图片
推荐阅读
- 关于|关于 SAP UI5 参数 $$updateGroupId 前面两个 $ 符号的含义
- 关于|关于 SAP UI5 Context.prototype.delete 方法的输入参数 Group ID 的细节
- SAP|SAP UI5 应用开发教程之一百零一 - SAP UI5 应用的 Locale 决定机制试读版
- 企业云原生IT成本治理案例解析 - 中华财险云原生上云IT成本治理之路
- 在|在 SAP BAS 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete 操作
- springboot默认日志框架选择源码解析(推荐)
- 1000道程序员常见问题解析|一文搞懂Linux 内存管理原理
- bitmap技术解析(redis与roaringBitmap)
- [Druid-1.2.9_preview_01源码系列]-4-DruidDataSource初始化时的神操作之自动解析DbType与驱动类
- 解析Mybatis底层实现原理