获取 itab 的 table 结构失败

Getting table structure of itab fails

我目前正在开展一个项目,将数据提取到多个 itab 中,并将它们全部保存到我本地电脑上的单个 excel 文件中。

为了将我的数据移动到 excel 文件中,我必须遍历似乎可以使用 cl_abap_structdescr=>describe_by_datacl_abap_tabledescr=>create 函数存档的表格字段。在我读到的 original article 中,作者将它们与 ABAP 词典 table 一起使用,我的目标是将其与任意内部 table 一起使用。

我在测试报告中试过,用T005测试:

data:
        lt_t005         type standard table of  t005,
        ls_t005         like line of            lt_t005,
        tablestructure  type ref to             cl_abap_structdescr,
        tabletype       type ref to             cl_abap_tabledescr.

*tablestructure ?= cl_abap_structdescr=>describe_by_name( 'lt_t005' ).
tablestructure ?= cl_abap_structdescr=>describe_by_data( lt_t005 ).
tabletype ?= cl_abap_tabledescr=>create(  p_line_type = tablestructure ).

describe_by_name()describe_by_data() 都不起作用,按名称描述会导致“NOT_FOUND”异常。因为它不是 ABAP 词典 Table 这对我来说有点有意义。按数据描述导致 CX_SY_MOVE_CAST_ERROR 告诉我源类型 \CLASS=CL_ABAP_TABLEDESC 无法转换为 "\CLASS=CL_ABAP_STRUCTDESC.

提前致谢

使用这个变体:

tablestructure ?= cl_abap_structdescr=>describe_by_data( ls_t005 ).
tabletype ?= cl_abap_tabledescr=>create(  p_line_type = tablestructure ).

DATA table TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE ANY TABLE.

CREATE DATA table TYPE HANDLE tabletype.
ASSIGN table->* TO <tab>.

SELECT *
  FROM t005
  INTO TABLE <tab>.

注意第一行与你的不同,describe_by_data方法接受平面结构,而不是 itab。

这里是所有 RTTS 对象及其可用方法的good overview

您正在尝试使用 class cl_abap_structdescr 创建 table 描述。这是行不通的,因为 class 是针对结构的,而不是针对 tables.

如果您需要 table 说明,请使用 class cl_abap_tabledescr

tabletype ?= cl_abap_tabledescr=>describe_by_data( lt_t005 ).

当你还需要所述table行的结构描述时,可以通过table描述获取:

tablestructure ?= tabletype->get_table_line_type( ).

请注意,如果内部 table 的行类型不是结构(如 TYPE TABLE OF string),最后一行将抛出 CX_SY_MOVE_CAST_ERROR 异常。