二维码

标准ALV大量数据无法导出的替换方法

Twilight发表于 2024-07-31 14:53Twilight 最后回复于 2024-07-31 14:53 [复制链接] 699 0

  1.   TYPES:BEGIN OF ty_header,
  2.          tname TYPE lvc_s_fcat-scrtext_l,
  3.        END OF ty_header.

  4.   DATA:lv_filename TYPE string.
  5.   DATA:lv_path     TYPE string.
  6.   DATA:lv_fullpath TYPE string.
  7.   DATA:ls_header TYPE ty_header.
  8.   DATA:lt_header TYPE TABLE OF ty_header.
  9. *构建的动态内表名
  10.   FIELD-SYMBOLS:<gt_fs_ALV> TYPE table, "动态内表
  11.                 <gs_fs_alv> TYPE any,   "动态内表工作区
  12.                 <fs_value>  TYPE any.
  13.   DATA:dy_table TYPE REF TO data, "用于存放动态内表结构
  14.        dy_wa    TYPE REF TO data. "动态内表工作区类型

  15.   CASE R_UCOMM.
  16.     WHEN 'DOWNLOAD'.
  17.       CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_Dialog
  18. *        EXPORTING
  19. *          WINDOW_TITLE              =
  20. *          DEFAULT_EXTENSION         =
  21. *          DEFAULT_FILE_NAME         =
  22. *          WITH_ENCODING             =
  23. *          FILE_FILTER               =
  24. *          INITIAL_DIRECTORY         =
  25. *          PROMPT_ON_OVERWRITE       = 'X'
  26.         CHANGING
  27.           FILENAME                  = lv_filename
  28.           PATH                      = lv_path
  29.           FULLPATH                  = lv_fullpath
  30. *          USER_ACTION               =
  31. *          FILE_ENCODING             =
  32.         EXCEPTIONS
  33.           CNTL_ERROR                = 1
  34.           ERROR_NO_GUI              = 2
  35.           NOT_SUPPORTED_BY_GUI      = 3
  36.           INVALID_DEFAULT_FILE_NAME = 4
  37.           others                    = 5.

  38.   lv_fullpath = lv_fullpath && '.xlsx'.

  39.   CLEAR:lt_header[].
  40.   LOOP AT git_field ASSIGNING FIELD-SYMBOL(<fs_field>).
  41.     ls_header-tname = <fs_field>-scrtext_l.
  42.     APPEND ls_header TO lt_header.
  43.   ENDLOOP.

  44. *-->根据FIELDCAT 构建ALV动态内表
  45.   CALL METHOD cl_alv_table_create=>create_dynamic_table
  46.     EXPORTING
  47.       it_fieldcatalog = git_field
  48.     IMPORTING
  49.       ep_table        = dy_table.

  50.   ASSIGN dy_table->* TO <gt_fs_alv>."根据传出动态内表结构创建动态内表
  51.   CREATE DATA dy_wa LIKE LINE OF <gt_fs_alv>."指向动态内表结构以创建工作区
  52.   ASSIGN dy_wa->* TO <gs_fs_alv>."构建工作区

  53.   LOOP AT git_alv ASSIGNING FIELD-SYMBOL(<fs_alv>).
  54.     CLEAR:<gs_fs_alv>.
  55.     MOVE-CORRESPONDING <fs_alv> TO <gs_fs_alv>.
  56.     APPEND <gs_fs_alv> TO <gt_fs_alv>.
  57.   ENDLOOP.

  58.   CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
  59.     EXPORTING
  60. *      BIN_FILESIZE              =
  61.       FILENAME                  = lv_fullpath
  62.       FILETYPE                  = 'DAT' "这里一般用DAT,如果用ASC则1000-不会显示为-1000,而dat会显示为-1000,如果用DBF则不会有缩进,即字符前面的空格会被除去,而且字符的前导0也会输出
  63. *      APPEND                    = SPACE
  64. *      WRITE_FIELD_SEPARATOR     = SPACE
  65. *      HEADER                    = '00'
  66. *      TRUNC_TRAILING_BLANKS     = SPACE
  67. *      WRITE_LF                  = 'X'
  68. *      COL_SELECT                = SPACE
  69. *      COL_SELECT_MASK           = SPACE
  70. *      DAT_MODE                  = SPACE
  71. *      CONFIRM_OVERWRITE         = SPACE
  72. *      NO_AUTH_CHECK             = SPACE
  73.       CODEPAGE                  = '8400'
  74. *      IGNORE_CERR               = ABAP_TRUE
  75. *      REPLACEMENT               = '#'
  76. *      WRITE_BOM                 = SPACE
  77. *      TRUNC_TRAILING_BLANKS_EOL = 'X'
  78. *      WK1_N_FORMAT              = SPACE
  79. *      WK1_N_SIZE                = SPACE
  80. *      WK1_T_FORMAT              = SPACE
  81. *      WK1_T_SIZE                = SPACE
  82. *      SHOW_TRANSFER_STATUS      = 'X'
  83.       FIELDNAMES                = lt_header
  84. *      WRITE_LF_AFTER_LAST_LINE  = 'X'
  85. *      VIRUS_SCAN_PROFILE        = '/SCET/GUI_DOWNLOAD'
  86. *    IMPORTING
  87. *      FILELENGTH                =
  88.     CHANGING
  89.       DATA_TAB                  = <gt_fs_alv>[]
  90.     EXCEPTIONS
  91.       FILE_WRITE_ERROR          = 1
  92.       NO_BATCH                  = 2
  93.       GUI_REFUSE_FILETRANSFER   = 3
  94.       INVALID_TYPE              = 4
  95.       NO_AUTHORITY              = 5
  96.       UNKNOWN_ERROR             = 6
  97.       HEADER_NOT_ALLOWED        = 7
  98.       SEPARATOR_NOT_ALLOWED     = 8
  99.       FILESIZE_NOT_ALLOWED      = 9
  100.       HEADER_TOO_LONG           = 10
  101.       DP_ERROR_CREATE           = 11
  102.       DP_ERROR_SEND             = 12
  103.       DP_ERROR_WRITE            = 13
  104.       UNKNOWN_DP_ERROR          = 14
  105.       ACCESS_DENIED             = 15
  106.       DP_OUT_OF_MEMORY          = 16
  107.       DISK_FULL                 = 17
  108.       DP_TIMEOUT                = 18
  109.       FILE_NOT_FOUND            = 19
  110.       DATAPROVIDER_EXCEPTION    = 20
  111.       CONTROL_FLUSH_ERROR       = 21
  112.       NOT_SUPPORTED_BY_GUI      = 22
  113.       ERROR_NO_GUI              = 23
  114.       others                    = 24.

  115.   ENDCASE.
复制代码

回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表