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

腾讯云_一般用云主机干嘛_新用户

小七 141 0

腾讯云_一般用云主机干嘛_新用户

本文档解释如何将使用CL\u SALV\u Tree类创建的SALV树转换为Excel文件。有一种标准方法可以将使用CL\u SALV\u表创建的SALV表转换为Excel文件。但是,我找不到一个类似的方法不适用于SALV树。市场上还有其他解决方案。但是,我觉得这个解决方案的定制代码最少(~100行)。

方法

如果仔细观察SALV Tree输出,您可能会发现,树本质上就是一个表本身。

要将表添加到树中,只需要添加分组和缩进。这是我在这里使用的概念,创建Excel文件–创建一个表,然后向其中添加分组和缩进。

解决方案

此开发的输入是一个CL\u SALV\u树对象。下面的代码使用公共表创建一个名为LR\u TREE的简单对象。这部分代码不是解决方案的一部分,它只是用来获取"测试数据"来测试解决方案。

理想情况下,您应该创建将SALV Tree转换为Excel文件的例程,作为一个全局方法/功能模块,以便许多程序可以重用它。这意味着,公共例程必须使用SALV Tree对象,并从中提取输出、标题、标题等数据。因此,大数据 学习,我在这里使用SALV Tree对象重新生成输出表。

代码从这里开始….

常量:lc\xlu space类型c值""此字段的十六进制值应为0030

数据:lv\ U level type i,

lv\ U xlsx type xstring,

lt\ U table type ref to data,

lr\ U data type ref to data。

字段符号:type any,

type standard table,

键入any.

lt\u nodes=lr\u tree->get\u nodes()->get\u all\u nodes()。

将lt\u nodes循环到ls\u node.

lr\u node=ls\u node–node.

清除lv\u级别。

do.

try.

lr\u node=lr\u node->get\u parent()。

将1添加到lv\u级别。

捕获cx\u salv\u消息。

退出。

endtry.

enddo.

lr\u data=ls\u node–node->get\u data row()。

分配lr\u data->*到

如果未指定。

创建数据lt\u表,如的标准表

将lt\u表->*指定给

endif.

将结构的组件1指定给。

从lv\u级别减去1。

执行lv\u级别时间。

将lc\u xlspace连接到。

enddo.

将附加到

endloop.

cl\u salv\u table=>工厂(

导入

r\u salv\u table=lr\u table

更改

t\u table=)。

lr\u table->显示()。

此时该表有缩进,但没有分组。所以,下一步是将其添加到表中。分组不能直接添加到内部表中,它必须直接在XML文件中完成。Excel需要3个标识符来理解行分组。

lv\u xlsx=lr\u table->to\u xml(if\u salv\u bs\u xml=>c\u type\u xlsx)。

数据:lr\u zip type ref to cl\u abap\u zip,

lr\u xlnode type ref to if\u ixml\u node,

lr\u xldimension type ref to if\u ixml\u node,

lr\u xlsheetpr type ref to if\u ixml\u element,

lr\u xloutlinepr type ref to if\u ixml\u element,

lv\u file type xstring,

lr\u file type ref to cl\u xml\u document,

lr\u xlrows type ref to if\u ixml\u node\u list,

lr\u xlrow type ref to if\u ixml\u element,

lr\u xlformat type ref to if\u ixml\u element,

lr\u xlrows type ref to if\u ixml\u element,大数据分析培训,

lv_tabix type i,

lv_maxlevel type i,

lv_levels type string.

创建对象lr_zip.

lr_zip->加载(lv_xlsx)。

*获取工作表XML文件

lr_zip->获取(导出名称='xl/worksheets/sheet1.XML'

导入内容=lv_文件)。

创建对象lr_文件。

lr_文件->解析_xstring(lv_文件)。

*行元素位于SheetData

lr\u xlnode=lr\u file->find\u node('SheetData')。

lr\u xlrows=lr\u xlnode->get\u children()。

do lr\u xlrows->get\u length()次。

lv\u tabix=sy index–1。

lr\u xlrow?=lr\u xlrows->get\u item(lv\u tabix).

*在SALV Tree对象中查找相同的节点

将表lt\u nodes读入ls\u node index lv\u tabix.

如果sy subrc eq 0.

lr\u node=ls\u node-node.

*查找节点的级别

清除lv\u级别

执行

尝试

lr\u node=lr\u node->get\u parent().

为lv u级别添加1.

捕获cx\u salv\u msg.

exit.

endtry.

enddo.

从lv\u level中减去1.

如果lv\u level为0.

lv\u levels=lv\u level.

如果lv\u level>lv\u maxlevel.

lv\u maxlevel=lv\u level.

endif.

压缩lv\u levels.

*将level分配到行

lr\u xlrow->设置\u属性(name='outlineLevel'value=lv\u levels)。

lr\u xlrow->设置\u属性(name='hidden'值='true')。

endif.

endif.

*设置表中使用的最大电平

lv\U levels=lv\U maxlevel.

压缩lv\U levels.

lr\U xlformat?=lr\u file->find\u node('sheetFormatPr')。

lr\u xlformat->set\u attribute(name='outlineLevelRow'value=lv\u levels)。

*在XML文件lr\u xlworksheet中创建新元素?=lr\u文件->查找\u节点('工作表')。lr\xlu尺寸?=lr\u文件->查找\u节点('dimension')。lr\u xlsheetpr=cl\u ixml=>create()->create\u document()->create\u元素(name='sheetPr')。lr\u xloutlinepr=cl\u ixml=>create()->create\u document()->create\u元素(name='outlinePr')。lr\u xlsheetpr->if\u ixml\u node~附加\u子级(lr\u xloutlinepr)。lr\u xloutlinepr->设置属性(name='summaryBelow'value='false')。lr\u xlworksheet->if\uIXML\u node~ insert\u child(new\u child=lr\u xlsheetpr ref\u child=lr\u xldimension)。