Data Export->EXCLE
1.FM 'SAP_CONVERT_TO_XLS_FORMAT'
可直接导出'XLSX'类型EXCEL.
CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT' EXPORTING i_filename = 'C:\temp\1.xlsx' "路径名 TABLES i_tab_sap_data = gt_alv "导出内表 EXCEPTIONS conversion_failed = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF.
2.Class
可根据ALV格式导出EXCEL,将需要下载的内表先转换成XML stream,然后再通过gui_download的BIN模式将xml stream下载成.xlsx文件。
DATA: l_defaultname TYPE string, l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_result TYPE i. DATA: l_length TYPE i, l_xml_stream TYPE xml_rawdata, l_flavour TYPE string, l_version TYPE string. DATA: lr_alv_new_data TYPE REF TO data, lr_result_data TYPE REF TO cl_salv_ex_result_data_table. DATA: ls_xml_choice TYPE if_salv_bs_xml=>s_type_xml_choice, xml TYPE xstring. GET REFERENCE OF gt_itab INTO lr_alv_new_data. "自定义保存路径 CONCATENATE 'Filename' INTO l_defaultname. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = 'Save as...' default_file_name = l_defaultname default_extension = 'XLSX' file_filter = '.XLSX' CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. * MESSAGE ELSE. IF l_fullpath IS NOT INITIAL. "根据fieldcat生成内表 lr_result_data = cl_salv_ex_util=>factory_result_data_table( r_data = lr_alv_new_data t_fieldcatalog = gt_fieldcat_sla ). 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 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 l_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 = l_filename 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. ENDIF. ENDIF.