ALV TAB 转 excel 二进制文件
1 . SE24: CLASS ZCL_ALV_EXCEL DEFINITION PUBLIC final CREATE PUBLIC . PUBLIC SECTION. METHODS CREATE_XLS_FROM_ITAB IMPORTING !IT_FIELDCAT TYPE LVC_T_FCAT OPTIONAL !IT_SORT TYPE LVC_T_SORT OPTIONAL !IT_FILT TYPE LVC_T_FILT OPTIONAL !IS_LAYOUT TYPE LVC_S_LAYO OPTIONAL !IV_XLSX TYPE FLAG OPTIONAL EXPORTING !EV_XSTRING TYPE XSTRING CHANGING !CT_DATA TYPE STANDARD TABLE . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS ZCL_ALV_EXCEL IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_ALV_EXCEL->CREATE_XLS_FROM_ITAB * +-------------------------------------------------------------------------------------------------+ * | [--->] IT_FIELDCAT TYPE LVC_T_FCAT(optional) * | [--->] IT_SORT TYPE LVC_T_SORT(optional) * | [--->] IT_FILT TYPE LVC_T_FILT(optional) * | [--->] IS_LAYOUT TYPE LVC_S_LAYO(optional) * | [--->] IV_XLSX TYPE FLAG(optional) * | [<---] EV_XSTRING TYPE XSTRING * | [<-->] CT_DATA TYPE STANDARD TABLE * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD CREATE_XLS_FROM_ITAB. DATA: LR_DATA TYPE REF TO DATA, LR_SALV_TABLE TYPE REF TO CL_SALV_TABLE, LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE, LR_AGGREG TYPE REF TO CL_SALV_AGGREGATIONS, LT_FCAT TYPE LVC_T_FCAT, LR_RESULT_DATA TYPE REF TO CL_SALV_EX_RESULT_DATA_TABLE, LV_VERSION TYPE STRING, LV_FILE_TYPE TYPE SALV_BS_CONSTANT, LV_FLAVOUR TYPE STRING. FIELD-SYMBOLS <LT_TAB> TYPE ANY TABLE. GET REFERENCE OF CT_DATA INTO LR_DATA. " 指定引用 " 如果没传入 fieldcatalog 需要创建 IF IT_FIELDCAT[] IS INITIAL. ASSIGN LR_DATA->* TO <LT_TAB>. TRY. CL_SALV_TABLE=>FACTORY( EXPORTING LIST_DISPLAY = ABAP_FALSE IMPORTING R_SALV_TABLE = LR_SALV_TABLE CHANGING T_TABLE = <LT_TAB> ). CATCH CX_SALV_MSG. ENDTRY. LR_COLUMNS = LR_SALV_TABLE->GET_COLUMNS( ). LR_AGGREG = LR_SALV_TABLE->GET_AGGREGATIONS( ). LT_FCAT = CL_SALV_CONTROLLER_METADATA=>GET_LVC_FIELDCATALOG( R_COLUMNS = LR_COLUMNS R_AGGREGATIONS = LR_AGGREG ). ELSE. LT_FCAT[] = IT_FIELDCAT[]. ENDIF. IF CL_SALV_BS_A_XML_BASE=>GET_VERSION( ) = IF_SALV_BS_XML=>VERSION_25 OR CL_SALV_BS_A_XML_BASE=>GET_VERSION( ) = IF_SALV_BS_XML=>VERSION_26. LR_RESULT_DATA = CL_SALV_EX_UTIL=>FACTORY_RESULT_DATA_TABLE( R_DATA = LR_DATA S_LAYOUT = IS_LAYOUT T_FIELDCATALOG = LT_FCAT T_SORT = IT_SORT T_FILTER = IT_FILT ). CASE CL_SALV_BS_A_XML_BASE=>GET_VERSION( ). WHEN IF_SALV_BS_XML=>VERSION_25. LV_VERSION = IF_SALV_BS_XML=>VERSION_25. WHEN IF_SALV_BS_XML=>VERSION_26. LV_VERSION = IF_SALV_BS_XML=>VERSION_26. ENDCASE. " 如果我们标记i_XLSX那么我们将创建XLSX,如果不是那么MHTML excel文件 IF IV_XLSX IS NOT INITIAL. LV_FILE_TYPE = IF_SALV_BS_XML=>C_TYPE_XLSX. ELSE. LV_FILE_TYPE = IF_SALV_BS_XML=>C_TYPE_MHTML. ENDIF. LV_FLAVOUR = IF_SALV_BS_C_TT=>C_TT_XML_FLAVOUR_EXPORT. "transformation of data to excel CALL METHOD CL_SALV_BS_TT_UTIL=>IF_SALV_BS_TT_UTIL~TRANSFORM EXPORTING XML_TYPE = LV_FILE_TYPE XML_VERSION = LV_VERSION R_RESULT_DATA = LR_RESULT_DATA XML_FLAVOUR = LV_FLAVOUR GUI_TYPE = IF_SALV_BS_XML=>C_GUI_TYPE_GUI IMPORTING XML = EV_XSTRING. ENDIF. ENDMETHOD. ENDCLASS. 2 . 使用案列:(核心代码 ) FORM frm_data_to_excel . DATA: lr_xls TYPE REF TO zcl_alv_excel. DATA: lr_xml TYPE REF TO cl_xml_document. DATA: lv_xtring TYPE xstring. DATA:lv_filepath TYPE string, lv_bytecount TYPE i, lt_file_tab TYPE solix_tab. TYPES: BEGIN OF ty_bin, bin_data(1024) TYPE x, END OF ty_bin. DATA: bin_tab TYPE TABLE OF ty_bin. DATA: lv_title TYPE string. DATA: lv_path TYPE ibipparms-path. CLEAR lv_xtring. CREATE OBJECT lr_xls. CALL METHOD lr_xls->create_xls_from_itab EXPORTING it_fieldcat = gt_fieldcat * it_sort = * it_filt = is_layout = gs_layout iv_xlsx = 'X' IMPORTING ev_xstring = lv_xtring CHANGING ct_data = gt_alv[]. lv_title = |{ s_bukrs-low }客户账龄分析报表.XLS|. PERFORM frm_set_path USING lv_title CHANGING lv_path. " Convert to binary CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xtring IMPORTING output_length = lv_bytecount TABLES binary_tab = lt_file_tab. lv_filepath = lv_path. " Save the file cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount filename = lv_filepath filetype = 'BIN' CHANGING data_tab = lt_file_tab ). IF sy-subrc = 0. MESSAGE s000(oo) WITH 'EXCEL导出成功'. ELSE. MESSAGE e000(oo) WITH 'EXCEL导出失败'. ENDIF. ENDFORM. FORM frm_set_path USING pv_title CHANGING cv_path. " 获取文件下载路径 CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_filename = pv_title " 默认文件名 def_path = 'C:' " 默认文件路径 mask = ',Excel Files,*.xls;*.xlsx,All Files,*.*.' mode = 'S' title = TEXT-001 " '请选择保存文件路径!' IMPORTING filename = cv_path EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 3 AND sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?