SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析
本文是这篇文章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'EXPORTINGi_line_header = abap_falsei_tab_raw_data = lt_rawi_filename = 'C:\temp\1.xlsx'TABLESi_tab_converted_data = lt_dataEXCEPTIONSconversion_failed = 1OTHERS = 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 ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析相关推荐
- 微信小程序使用node-xlsx解析excel文件的云函数
1.右键新建node.js云函数 2.在该云函数右键:在外部终端窗口打开 3.输入npm install node-xlsx,回车 4.引入并写程序,如下 // 云函数入口文件 const cloud ...
- 使用 SAP ABAP 代码生成 PDF 文件,填充以业务数据并显示在 SAPGUI 里试读版
本专栏计划的文章数在 150 篇左右,到 2022年9月12日为止,目前已经更新了 51 篇,专栏完成度为 34% 零基础 ABAP 学习教程系列文章的目录 1. ABAP 标准培训教程 BC400 ...
- java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?
最近要做一个导入导出 Excel 的功能,上一次做这个功能的时候,还是用的 Java Apache POI,这是一个用 Java 编写的免费开源的跨平台的 Java API,能够对 Microsoft ...
- java解析Excel文件的方法
java解析Excel文件的方法 介绍 1.1 pom依赖 1.2 将数据流转化为可解析的Workbook类型文件 1.3 解析 1.4 Controller层接收前端传递的Excel文件(前端使用E ...
- 前端解析Excel文件js-xlsx与bootstrapTable
前端解析Excel文件js-xlsx与bootstrapTable 1.引入xlsx.js 2.上传Excel按钮 3.读取Excel文件 4.结果 1.引入xlsx.js <script sr ...
- 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库
前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...
- js前端解析excel文件
使用纯Javascript解析excel文件. 使用的是开源的解析excel的js库:sheetjs.github地址:https://github.com/SheetJS/js-xlsx 首先引用J ...
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...
- java解析Excel文件
下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...
最新文章
- OpenCV+python:顶帽、黑帽、形态学梯度
- JavaScript中“ =gt;”(等于或大于的箭头)的含义是什么?
- 每天一个linux命令(22):find 命令的参数详解
- SpringBoot(四)-- 整合Servlet、Filter、Listener
- python csv读取数据 去掉标题-Python读csv文件去掉一列后再写入新的文件实例
- 学习笔记(30):Python网络编程并发编程-Event事件
- 求数组中数对的最大值
- 后台数据到mysql怎样保持实时更新_MySQL是如何保证数据的完整性
- android space边框,Android中的图片视图的边框?
- Java sychronized关键字总结(二)
- 征途2服务器显示不出来怎么办,征途2手游进不了游戏怎么办 游戏无法进入解决方法[多图]...
- 身体指数bmi流程图_理想的身体脂肪百分比是多少?男女不同脂肪数据对照表
- 虚拟机运行出现蓝屏解决 win11
- 序列化和反序列化(示例)
- java excel 打不开_Java使用POI生成Excel文件后打不开的问题
- 安装wordpress时Error establishing a database connection
- mysql delete in死锁_delete where in导致的死锁问题
- 自然语言处理技术之词嵌入方法-2
- 图片爬取和IP地址查询
- freebsd和linux服务器,我看Linux与FreeBSD