FORM frm_export_excel .
DATA: lv_fname TYPE string.
DATA lr_column TYPE REF TO cl_salv_column.
DEFINE set_name.
lr_column = lr_columns->get_column( &1 ).
lr_column->set_medium_text( &2 ).
END-OF-DEFINITION.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, "内表结构
<dyn_wa> . "表头
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data . "行
IF it_output[] IS INITIAL.
MESSAGE '没有需要下载的数据' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat[]
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
LOOP AT it_output ASSIGNING FIELD-SYMBOL(<wa_alv>).
MOVE-CORRESPONDING <wa_alv> TO <dyn_wa>.
APPEND <dyn_wa> TO <dyn_table>.
ENDLOOP.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = DATA(lr_salv)
CHANGING
t_table = <dyn_table>.
lr_salv->get_columns( )->set_optimize( 'X' ).
lr_salv->get_functions( )->set_all( ).
DATA(lr_columns) = lr_salv->get_columns( ).
lr_columns->set_optimize( abap_true ).
LOOP AT it_fieldcat INTO DATA(ls_fieldcat).
set_name ls_fieldcat-fieldname ls_fieldcat-scrtext_m .
ENDLOOP.
* SET_NAME 'BMENG' '回复交货数量'.
* SET_NAME 'UPDKZ' '修改类型(U/I)'.
* DATA(LR_COLUMN) = LR_COLUMNS->GET_COLUMN( 'UPDKZ' ).
* LR_COLUMN->SET_MEDIUM_TEXT( '修改类型(U/I)' ).
CATCH cx_root.
MESSAGE '显示异常!' TYPE 'E'.
ENDTRY.
*生成XML数据
DATA(lv_xml) = lr_salv->to_xml( xml_type = '10' ).
*导出XML数据并生成XLSX文件
lv_fname = |ZSDR019_销售订单创建平台{ sy-datum }_{ sy-uzeit }|.
CALL FUNCTION 'XML_EXPORT_DIALOG'
EXPORTING
i_xml = lv_xml
i_default_extension = 'XLSX'
i_initial_directory = ''
i_default_file_name = lv_fname
i_mask = 'Excel (*.XLSX)|*.XLSX'
EXCEPTIONS
application_not_executable = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.