当前位置:网站首页>SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析
SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析
2022-07-21 10:42:00 【汪子熙】
本文是这篇文章SAP ABAP 处理 Excel 的标准函数 TEXT_CONVERT_XLS_TO_SAP 介绍的后续。
在本地新建一个 excel 文件,内容如下:
使用下面的 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_raw TYPE truxs_t_text_data.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = abap_false
i_tab_raw_data = lt_raw
i_filename = 'C:\temp\1.xlsx'
TABLES
i_tab_converted_data = 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 程序交互。
边栏推荐
- 递归_计算 f(n)=f(n-1)+f(n-2)
- The list set is de duplicated according to the object attributes
- Use okgo to update, download and install the software version
- Custom annotation verification parameters
- Specific use of typescript in cocos
- 极化SAR——极化椭圆
- [untitled]
- 特征抽取工具-Transformer-bert
- day 4 (项目一:家庭收支记录)
- Discussion on the practice of layaair
猜你喜欢
【JS 逆向百例】某公共資源交易網,公告 URL 參數逆向分析
word文档中动态生成excel表格(基金公告系列讲解)
Alibaba cloud technology expert Yang Zeqiang: building observable capabilities on elastic computing cloud
Codeql usage process
likeshop单商户SAAS商城系统无限多开
Policy mode rewriting if else advanced use
Stream流对List集合筛选重复字段
游戏中的数学之角与弧度、三角函数
js教程实践(JS基础)
LeetCode652 寻找重复的子树
随机推荐
ThreadPoolTaskExecutor使用
简易Shader实践记录5-屏幕渐变
Dynamically generate excel forms in word documents (explanation of Fund announcement Series)
游戏中的数学之3D基础
第109篇 Compound 中的 Liquidate
怎样才能让需求无法如期顺利上线(一)整体策略
Alibaba cloud toolkit one click automatic deployment of jar packages
第99篇 Truffle 之 Ganache
Information entropy_ Joint entropy_ Conditional entropy_ information gain
Vscode practical annotation regular substitution
[untitled]
Elk+filebeat build distributed logs
推薦系統常見術語
《如果……》拉迪亚德·吉卜林
How to make the demand unable to go online smoothly as scheduled (V) business acceptance stage
学习基础-单词记忆
How to make the demand unable to go online smoothly as scheduled (III) development stage
MySQL creates new users and authorizes them
Policy mode rewriting if else advanced use
基于ABP实现DDD--领域服务、应用服务和DTO实践