https://www.cnblogs.com/hhelibeb/articles/5765451.html#_label0
https://blog.youkuaiyun.com/weixin_30872789/article/details/99659749
*&---------------------------------------------------------------------*
*& Report ZTEST_003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_003.
TYPES:BEGIN OF TYP_TH_OUTPUT.
INCLUDE STRUCTURE ZTEST002.
TYPES:END OF TYP_TH_OUTPUT.
DATA:
LTD_OUTPUT TYPE TABLE OF TYP_TH_OUTPUT,
LTH_OUTPUT TYPE TYP_TH_OUTPUT,
L_LENGTH TYPE I,
L_XML_STREAM TYPE XML_RAWDATA,
L_FLAVOUR TYPE STRING,
L_VERSION TYPE STRING,
GIT_VBAP TYPE STANDARD TABLE OF VBAP,
GIT_FCAT TYPE LVC_T_FCAT,
GWA_LAYOUT TYPE LVC_S_LAYO,
LR_ALV_NEW_DATA TYPE REF TO DATA,
LR_RESULT_DATA TYPE REF TO CL_SALV_EX_RESULT_DATA_TABLE,
LS_XML_CHOICE TYPE IF_SALV_BS_XML=>S_TYPE_XML_CHOICE,
XML TYPE XSTRING.
SELECT MATNR
ERSDA
INTO TABLE LTD_OUTPUT
FROM MARA
UP TO 100 ROWS.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ZTEST002'
CHANGING
CT_FIELDCAT = GIT_FCAT "生成下载excel文件的头--reptext字段
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
GWA_LAYOUT-ZEBRA = 'X'.
GWA_LAYOUT-SEL_MODE = 'A'.
GWA_LAYOUT-CWIDTH_OPT = 'X'.
*----- 将内表引用到RANGE表中
GET REFERENCE OF LTD_OUTPUT INTO LR_ALV_NEW_DATA.
*----- 创建前模型
LR_RESULT_DATA = CL_SALV_EX_UTIL=>FACTORY_RESULT_DATA_TABLE(
* t_selected_rows = lt_lvc_row
* t_selected_columns = lt_sel_cols
* t_selected_cells = lt_sel_cells
R_DATA = LR_ALV_NEW_DATA
S_LAYOUT = GWA_LAYOUT
* S_LAYOUT = lr_grid->m_cl_variant->ms_layout
T_FIELDCATALOG = GIT_FCAT
* t_sort = lr_grid->m_cl_variant->mt_sort
* t_filter = lr_grid->m_cl_variant->mt_filter
* t_hyperlinks = lr_grid->mt_hyperlinks
* s_current_cell = ls_cur_cell
* hyperlink_entry_column = ls_hyper_entry
* dropdown_entry_column = ls_dropdown_entry
* r_top_of_list = lr_top_of_list
* r_end_of_list = lr_end_of_list
* t_dropdown_values = lt_drdn
).
*----- 获取版本
CASE CL_SALV_BS_A_XML_BASE=>GET_VERSION( ).
WHEN IF_SALV_BS_XML=>VERSION_25.
L_VERSION = IF_SALV_BS_XML=>VERSION_25.
WHEN IF_SALV_BS_XML=>VERSION_26.
L_VERSION = IF_SALV_BS_XML=>VERSION_26. " = 2.6
ENDCASE.
L_FLAVOUR = IF_SALV_BS_C_TT=>C_TT_XML_FLAVOUR_EXPORT. " Flavor for Complete ALV XML
*----- 根据XML版本集转换
CALL METHOD CL_SALV_BS_TT_UTIL=>IF_SALV_BS_TT_UTIL~TRANSFORM
EXPORTING
XML_TYPE = IF_SALV_BS_XML=>C_TYPE_XLSX "XLSX
XML_VERSION = L_VERSION
R_RESULT_DATA = LR_RESULT_DATA
XML_FLAVOUR = L_FLAVOUR
GUI_TYPE = IF_SALV_BS_XML=>C_GUI_TYPE_GUI "Y6DK066330
IMPORTING
XML = XML.
*IF NOT I_FILENAME IS INITIAL.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = XML
IMPORTING
OUTPUT_LENGTH = L_LENGTH
TABLES
BINARY_TAB = L_XML_STREAM.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
BIN_FILESIZE = L_LENGTH
FILETYPE = 'BIN'
FILENAME = 'C:\Users\mm\Desktop\ZTEST08.XLSX'
CHANGING
DATA_TAB = L_XML_STREAM
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*ENDIF.