本文是这篇文章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 单步执行分析相关推荐

  1. 微信小程序使用node-xlsx解析excel文件的云函数

    1.右键新建node.js云函数 2.在该云函数右键:在外部终端窗口打开 3.输入npm install node-xlsx,回车 4.引入并写程序,如下 // 云函数入口文件 const cloud ...

  2. 使用 SAP ABAP 代码生成 PDF 文件,填充以业务数据并显示在 SAPGUI 里试读版

    本专栏计划的文章数在 150 篇左右,到 2022年9月12日为止,目前已经更新了 51 篇,专栏完成度为 34% 零基础 ABAP 学习教程系列文章的目录 1. ABAP 标准培训教程 BC400 ...

  3. java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?

    最近要做一个导入导出 Excel 的功能,上一次做这个功能的时候,还是用的 Java Apache POI,这是一个用 Java 编写的免费开源的跨平台的 Java API,能够对 Microsoft ...

  4. java解析Excel文件的方法

    java解析Excel文件的方法 介绍 1.1 pom依赖 1.2 将数据流转化为可解析的Workbook类型文件 1.3 解析 1.4 Controller层接收前端传递的Excel文件(前端使用E ...

  5. 前端解析Excel文件js-xlsx与bootstrapTable

    前端解析Excel文件js-xlsx与bootstrapTable 1.引入xlsx.js 2.上传Excel按钮 3.读取Excel文件 4.结果 1.引入xlsx.js <script sr ...

  6. 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  7. js前端解析excel文件

    使用纯Javascript解析excel文件. 使用的是开源的解析excel的js库:sheetjs.github地址:https://github.com/SheetJS/js-xlsx 首先引用J ...

  8. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  9. java解析Excel文件

    下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...

最新文章

  1. OpenCV+python:顶帽、黑帽、形态学梯度
  2. JavaScript中“ =gt;”(等于或大于的箭头)的含义是什么?
  3. 每天一个linux命令(22):find 命令的参数详解
  4. SpringBoot(四)-- 整合Servlet、Filter、Listener
  5. python csv读取数据 去掉标题-Python读csv文件去掉一列后再写入新的文件实例
  6. 学习笔记(30):Python网络编程并发编程-Event事件
  7. 求数组中数对的最大值
  8. 后台数据到mysql怎样保持实时更新_MySQL是如何保证数据的完整性
  9. android space边框,Android中的图片视图的边框?
  10. Java sychronized关键字总结(二)
  11. 征途2服务器显示不出来怎么办,征途2手游进不了游戏怎么办 游戏无法进入解决方法[多图]...
  12. 身体指数bmi流程图_理想的身体脂肪百分比是多少?男女不同脂肪数据对照表
  13. 虚拟机运行出现蓝屏解决 win11
  14. 序列化和反序列化(示例)
  15. java excel 打不开_Java使用POI生成Excel文件后打不开的问题
  16. 安装wordpress时Error establishing a database connection
  17. mysql delete in死锁_delete where in导致的死锁问题
  18. 自然语言处理技术之词嵌入方法-2
  19. 图片爬取和IP地址查询
  20. freebsd和linux服务器,我看Linux与FreeBSD

热门文章

  1. 重装win10遇到的坑
  2. 在HMM中,如果已知观察序列和产生观察序列的状态序列,那么可用以下哪种方法直接进行参数估计
  3. golang使用go Modules相关命令时报错
  4. sqlserver 查询单引号
  5. Ghost之远程终端管理
  6. 快速批量删除新浪微博内容
  7. Visual Studio中更改项目名称
  8. unparseable date:‘’
  9. luogu P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
  10. 【深度学习】目标检测综述