SAP ABAP 解析 excel 文件的函数 TEXT_CONVERT_XLS_TO_SAP 单步执行分析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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'
  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 内部初始化:

d36afd5a0ae466869e31c83d059740e8.png

这里调用静态方法 c_oi_container_control_creator=>get_container_control,初始化 OLE container:

670439b87d652f8e8db2a111b72d4488.png可以看到走的是 ActiveX 技术:

670439b87d652f8e8db2a111b72d4488 (2).png

OLE container 初始化成功:C_OI_CONTAINER_CONTROL

5b1ce117a144612aba5a31bbf243cbcc.png

接着创建一个名为 TRUX_CONTAINER 的 custom container:

5b1ce117a144612aba5a31bbf243cbcc.png7cd3727209ac99bab3edd4e795d79ed4.png

获得 Excel 应用的代理类(document_proxy):


使用代理类打开本地 excel 文件:FILE://C:\temp\1.xlsx

9ba90ae760774006ed923d746eaa672e.png

这里的本质是,向本地电脑安装的 excel 执行文件,发送一个 OpenDocument 的命令:

5550c8bf5ddea81ab0ddea0bb312aa00.png

这里通过普通的单步调试,无法进入 CALL_METHOD 内部:

70596bb82084a0540f96f401aa953eef.png

需要打开 ABAP 调试器的系统程序调试功能(System Debugging On/Off):

70596bb82084a0540f96f401aa953eef.png

通过 SAPGUI 的 OLE 容器,发送 OpenDocument 的命令:

9777b70db7cd27de62f51d19ca54a394.png

凡是在 ABAP 调试器里以蓝色显示的调用栈,证明是 SAP ABAP 的系统程序,而非应用程序:

5550c8bf5ddea81ab0ddea0bb312aa00.png


在函数 AC_CALL_METHOD 内部,调用的就是用 C/C++ 语言编写的 kernel 函数了,这些函数无法再在 ABAP 调试器里单步调试。


5550c8bf5ddea81ab0ddea0bb312aa00 (1).png


以上就是 ABAP 通过给 Excel.exe 发送 OpenDocument 打开 Excel 文件的实现过程。


我们安装一个名叫 Process Explorer 的软件。

因为我们源代码里,指定的 TABLES 参数的数据类型,其行项目是一个包含 field1 和 field2 两个字段的结构,因此函数内部智能地决定读取第一张 spreadsheet 的前两列,读取行数的范围为 100:

a07b41c2f8d540a467ef0bcaf632c0c4.png

ABAP 通过所谓的 range,来描述待读取 Excel 数据的范围。


这里代码第 88 行 l_range_list 变量,内容如下:

07b7fe01cee85c0afce73d8a1e84ea8c.png

代码第 93 行的 get_ranges_data 方法执行完毕之后,range 指定范围的数据,就读取到内表 l_table_range 里了:


12e0bddc565de702955079e9b8c22afc.png


如下图所示:

6733c38d12d70d220dacc078b2947721.png

这里采取的仍然是通过 OLE 代理对象,向本地 excel.exe 发送命令的方式来完成:

07b7fe01cee85c0afce73d8a1e84ea8c.png

我们下载一个名叫 Process Explorer的进程管理工具,执行后,在路径 wininit.exe-services.exe-svhost.exe 下面,能发现 SAPGUI 里执行上述 ABAP 程序,所启动的 excel.exe 进程:


7fba6fb99aa578e3697652de50465ffa.png


双击上图图例4,能看到 excel.exe 的启动参数 -Embedding,证明 ABAP 程序确实通过 OLE 技术同本地的 Excel 程序交互。

36b57a854904101e3719b06558501665.png

目录
相关文章
|
2月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
3月前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
433 2
|
5天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
52 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2月前
|
数据采集 自然语言处理 搜索推荐
基于qwen2.5的长文本解析、数据预测与趋势分析、代码生成能力赋能esg报告分析
Qwen2.5是一款强大的生成式预训练语言模型,擅长自然语言理解和生成,支持长文本解析、数据预测、代码生成等复杂任务。Qwen-Long作为其变体,专为长上下文场景优化,适用于大型文档处理、知识图谱构建等。Qwen2.5在ESG报告解析、多Agent协作、数学模型生成等方面表现出色,提供灵活且高效的解决方案。
197 49
|
1月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
32 6
按条件将Excel文件拆分到不同的工作表
|
1月前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
40 6
|
1月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
41 6
|
2月前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
65 8
|
1月前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
42 5
|
1月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
56 4

推荐镜像

更多