csv 如何在ABAP中将字段-值表转换为普通表?[closed]

rfbsl7qr  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(182)

两年前关闭了。
Improve this question
我应该创建一个带有水平表的文件。
我有这张table:
| 字段名称|字段值|
| - ------| - ------|
| Z场1| A类|
| Z场2|乙|
| Z场3| C级|
| ZFIELD4| D级|

文件将为:
| Z场1| Z场2| Z场2| Z场2|
| - ------| - ------| - ------| - ------|
| A类|乙|C级|D级|
我怎么做这个代码?

bqf10yzr

bqf10yzr1#

以下是如何在您的方案中创建CSV文件的简短示例:

CONSTANTS:
  lc_filename TYPE string VALUE `C:\Myfile.csv`.

DATA:
  l_fieldnames  TYPE string,
  l_fieldvalues TYPE string,
  l_csv_file    TYPE STANDARD TABLE OF string.

FIELD-SYMBOLS:
  <l_workarea> LIKE LINE OF gt_prepare_file.

* Create CSV lines
LOOP AT gt_prepare_file ASSIGNING <l_workarea>.
  PERFORM csv_encode USING <l_workarea>-fieldname CHANGING l_fieldnames.
  PERFORM csv_encode USING <l_workarea>-fieldvalue CHANGING l_fieldvalues.
ENDLOOP.

* Create CSV file
INSERT l_fieldnames INTO TABLE l_csv_file.
INSERT l_fieldvalues INTO TABLE l_csv_file.

* Download CSV file
CALL METHOD cl_gui_frontend_services=>gui_download
  EXPORTING
    filename = lc_filename
  CHANGING
    data_tab = l_csv_file.

* Add a value to a line of the CSV file
FORM csv_encode USING value TYPE string CHANGING target TYPE string.
  CONSTANTS:
    lc_separator         TYPE string VALUE `,`,
    lc_delimiter         TYPE string VALUE `"`,
    lc_escaped_delimiter TYPE string VALUE `""`.

  DATA:
    l_encoded_value TYPE string.

* Use delimiter if value contains separator
  l_encoded_value = value.

  IF value CS lc_separator.
    REPLACE ALL OCCURRENCES OF lc_delimiter IN l_encoded_value WITH lc_escaped_delimiter.
    CONCATENATE lc_delimiter l_encoded_value lc_delimiter INTO l_encoded_value.
  ENDIF.

* Add value to line
  IF target IS INITIAL.
    target = l_encoded_value.
  ELSE.
    CONCATENATE target lc_separator l_encoded_value INTO target.
  ENDIF.
ENDFORM.

请调整常量并在代码中添加一些错误处理。如果您想在Microsoft Excel中使用CSV文件,请注意分隔符是特定于国家/地区的设置。

igetnqfo

igetnqfo2#

一个简单的方法,

  • 创建平面表格standard table of string
  • DD03L表中检索表的字段
  • 将字段名串联成字符串,并将其添加到平面表中
  • 循环遍历表中的数据,并为每个字段名(来自DD03L结构体)赋值(assign component of structure),连接这些值,在完成对字段名的循环后,将其添加到表中。

您可以轻松地将平面表格转换为水平表格。

ymzxtsji

ymzxtsji3#

您可以在ABAP中创建一个动态表,并手动填充字段目录,然后在ALV中显示该表。请查看博客文章 Dynamic internal table iilustrated with an example of creating the transpose of internal table

相关问题