云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

_微微一笑很倾城百度云资源_排行榜

小七 141 0

嗨,SAPpers,

我想在这个博客中描述的方法不是新的,可能是ABAP大师所知道的,但是很多初学者经常问这个问题,所以这个博客出现了。所描述的方法不是一个全面的Excel解析解决方案,而是一个生命环,当客户要求快速解决方案和最后期限已过"昨天"。

你们中的任何人我肯定面临这样的共同任务,如Excel文件处理,这项任务往往是在不同的SAP环境,如OData服务,Webdynpro应用程序,FPM应用程序等等。通常,您拥有的一切都是一个XLSX文件和/或由其生成的XSTRING数据,对结构一无所知,您需要快速解析表内容,以便在应用程序中进行处理。你将如何进行?

SAP提供了许多与Excel相关的编程工具,它们列在这个方便的页面上:

https://wiki.scn.sap.com/wiki/display/ABAP/Excel+with+sap+-+An+概述

为什么不用?这里有几个星号:

有人会说:如果我们已经有ABAP2XLSX,为什么我们还需要另一个工具?

ABAP2XLSX无疑是一个伟大而强大的工具,我也在我的项目中使用过它,但它的安装经常有困难。有些客户固执地拒绝在系统中安装自定义软件包,有些客户担心许可证问题,有些客户对第三方开放,但在像我现在工作的大型跨国公司中,批准将第三方安装到ABAP系统需要几个月的时间。

当Excel解析完全需要时,刚才,因为所有的截止日期都过去了,而且是"昨天",在这种关键的情况下,我向客户提出了我将在这里描述的解决方案,它不能真正称为解决方案,因为它有许多缺陷,但它可以做基本的工作,并将Excel文件转换为ABAP中的内部表。我请你把它当作一个概念证明而不是解决方案,但是它功能齐全,可以很容易地适应你的需要(或者不那么容易)。

当我分析问题的可能解决方案时,我考虑了许多候选人,但是没有什么适合我的需要是有原因的。我甚至回顾了古代的时间片段(2009年在COVID之前是lon),其中一些非常酷,比如这一个来自长期受人尊敬的ABAP战士Naimesh Patel是的,Naimesh提供的XML生成工作很快,而且简单,但是格式本身在设计上就很差。电子表格ML尽管名称不是一个功能齐全的电子表格,但它只是XML的一个子集,能够表示表格数据,但有许多局限性。

Madhu Omer也做了一件了不起的工作,老实说,我对所做的工作印象非常深刻,但对于我的任务来说,它似乎过于复杂,只涉及XLSX生成部分,我迫切地寻找一种解析方法。此外,她在工具中使用的iXML库存在一些性能缺陷,不适合大数据。

Rajesh Rajgor做了另一个很好的尝试来实现相同的结果,与Madhu不同的是,她通过简单的转换,使用ABAP字符串模板直接构建XML模板。不幸的是,这种方法不是很灵活,而且它只是一个电子表格ML,大数据学什么,而不是一个完整的XLSX电子表格,所以他的工作只是对Naimesh旧转换器的现代反思。

我发现真正有趣的是Trevor Zhang用现代类和现代简洁语法编写的导入/导出解决方案。现代的问题需要现代的解决方案,下载返利,他们说,呵呵。

我不知道cl\u ehfnd\u xlsx类是由ABAP AS 752引入的,在网络上关于它的信息仍然很少,所以它看起来更像是S4HANA内部的东西,不是为客户准备的。无论如何,这是一个选项,但是的,它需要752版本,我们的系统仍然在750上,所以我再次运气不佳:(

让我简要概述一下.XLSX解析的细节,在开始实现之前必须知道:

工作表文件(sheet1.xml,sheet2.xml,…),它们包含用于在工作表上放置数据的标记共享字符串文件(共享字符串.xml),它包含已消除重复的值数组样式定义(样式.xml)它定义了工作表的单元格的外观工作簿文件(工作簿.xml)它建立了工作簿和工作表的结构许多其他的…

对于解析任务,我们只对前两个感兴趣:sheet1.xml和共享字符串.xml,这是在ABAP中成功重新创建表所需的绝对最小值。

sheet1.xml文件描述了整个表的数据结构,它的核心部分是

共享的数据只不过是一个以字符串格式存储的Excel表值数组:

让我分享从XLSX文件中获取表并将其转换为ABAP itab的步骤:

足够的单词,让我们跳转到代码。

主解析类XLSX\u reader:

转换zheet for表单文件

共享字符串转换zxlsx

示例调用程序:

该程序的思想是,用户有两种选择进行解析:要么解析为通用字符串表,要么接收手中的完整类型的内部表。类型可以在选择屏幕(DDIC结构输入框)上显式指定,或者程序可以从Excel表格的第一行派生类型,前提是表格中填充了数据元素名称(使用第一行作为结构复选框)。

第一行键入表格MARC(列的子集)的样本输入

并输出到完全键入的表格itab

显式指定DDIC结构KALC的样本输入

请注意,云服务器试用,尽管"数字存储为字符串"值,阿里大数据应用平台,但我们在ABAP中收到了全类型表,甚至FLTP值都被正确存储了

最后是转换成字符串表的最简单的情况

关于当前示例实现的局限性的几点注意: