原文出处:一个简洁实用的ALV显示模板
*&---------------------------------------------------------------------*
*& ALV内容复制到剪贴板
*&---------------------------------------------------------------------*
FORM alvtoclip TABLES t_alvtab USING withheader.
DATA: fldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
marked TYPE slis_t_fieldcat_alv WITH HEADER LINE,
entries TYPE slis_t_filtered_entries WITH HEADER LINE.
DATA: charc TYPE char256,
charstr TYPE string,
ftype .
DATA: htab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab .
DATA: lt_clip TYPE TABLE OF char2048 WITH HEADER LINE .
FIELD-SYMBOLS <fs_fld>.
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
IMPORTING
et_fieldcat = fldcat[]
et_marked_columns = marked[]
et_filtered_entries = entries[]
EXCEPTIONS
no_infos = 1
program_error = 2
OTHERS = 3.
IF marked[] IS INITIAL.
marked[] = fldcat[].
DELETE marked WHERE no_out = 'X' OR tech = 'X'.
ENDIF.
SORT entries.
CHECK marked[] IS NOT INITIAL.
CHECK t_alvtab[] IS NOT INITIAL.
IF withheader IS NOT INITIAL.
LOOP AT marked.
CONCATENATE lt_clip htab marked-seltext_l INTO lt_clip.
ENDLOOP.
IF sy-subrc = 0.
SHIFT lt_clip.
APPEND lt_clip.
ENDIF.
ENDIF.
LOOP AT t_alvtab.
READ TABLE entries WITH KEY table_line = sy-tabix BINARY SEARCH.
CHECK sy-subrc <> 0 .
CLEAR lt_clip.
LOOP AT marked.
ASSIGN COMPONENT marked-fieldname OF STRUCTURE t_alvtab TO <fs_fld>.
CHECK sy-subrc = 0.
DESCRIBE FIELD <fs_fld> TYPE ftype.
CASE ftype.
WHEN 'I' OR 'P' OR 'F' OR 'a' OR 'e' OR 'b' OR 's'.
charc = abs( <fs_fld> ).
CONDENSE charc NO-GAPS.
IF <fs_fld> < 0.
CONCATENATE '-' charc INTO charc.
ENDIF.
charstr = charc.
WHEN 'D' OR 'T'.
IF <fs_fld> IS INITIAL OR <fs_fld> = ''.
charc = ''.
ELSE.
WRITE <fs_fld> TO charc .
ENDIF.
charstr = charc.
WHEN 'X' OR 'y' OR 'g'.
charstr = <fs_fld> .
WHEN OTHERS.
WRITE <fs_fld> TO charc .
charstr = charc.
ENDCASE.
CONCATENATE lt_clip htab charstr INTO lt_clip.
ENDLOOP.
SHIFT lt_clip.
APPEND lt_clip.
ENDLOOP.
CHECK lt_clip[] IS NOT INITIAL.
CALL FUNCTION 'CLPB_EXPORT'
TABLES
data_tab = lt_clip
EXCEPTIONS
clpb_error = 01.
IF sy-subrc = 0.
MESSAGE s000(oo) WITH '已经导出到剪贴板'(m01).
ELSE.
MESSAGE e000(oo) WITH '导出到剪贴板错误'(m02).
ENDIF.
ENDFORM.