通过XML转换下载.xlsx格式的excel文件 | 您所在的位置:网站首页 › sap导入excel › 通过XML转换下载.xlsx格式的excel文件 |
![]() ![]() 石头 2月 4, 2017 ALV, Report 12,097 views 0 在SAP系统中,通过SE11显示一个table的内容,可以发现ALV grid的显示界面上有个spread sheet的标准按钮,点击这个按钮可以将显示的内容下载成excel文件,其中也包括扩展名.xlsx的文件。 这个功能很方便,因为下载的结果和ALV中看到的是一样的。 debug研究了一下标准代码,发现是将需要下载的内表先转换成XML stream,然后再通过gui_download的BIN模式将xml stream下载成.xlsx文件。 写了一个简单的程序供大家参考 ABAP 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 REPORT ztest_alv_download. DATA:git_vbap TYPE STANDARD TABLE OF vbap.DATA:git_fcat TYPE lvc_t_fcat, gwa_layout TYPE lvc_s_layo.DATA: l_path TYPE string, l_filename TYPE string. START-OF-SELECTION. SELECT * INTO TABLE git_vbap FROM vbap UP TO 100 ROWS. CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'VBAP' 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'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'FRM_STATUS_SET' i_callback_user_command = 'FRM_USER_COMMAND' is_layout_lvc = gwa_layout it_fieldcat_lvc = git_fcat TABLES t_outtab = git_vbap[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc 0.* Implement suitable error handling here ENDIF. FORM frm_status_set USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'S0001'.ENDFORM. "frm_status_setFORM frm_user_command USING r_ucomm TYPE sy-ucomm rs_selfield TYPE slis_selfield.* Local Variable Declare DATA: l_filename TYPE string. IF r_ucomm = 'DOWN'.* get file name PERFORM frm_get_directory CHANGING l_filename.* download PERFORM export_to_excel USING l_filename. ENDIF. ENDFORM.FORM frm_get_directory CHANGING c_filename TYPE string. DATA : l_title TYPE string, l_filename TYPE string, "file name l_path TYPE string VALUE 'C:\TEMP', "path l_fullpath TYPE string, "full path l_result TYPE i. "result return l_title = 'Save as...'. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_title default_extension = 'XLSX' default_file_name = 'Download.XLSX'* with_encoding =* file_filter = initial_directory = l_path prompt_on_overwrite = 'X' CHANGING filename = l_filename path = l_path fullpath = l_fullpath user_action = l_result* file_encoding = EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. c_filename = l_filename. "l_path. ENDIF. ENDFORM.*&---------------------------------------------------------------------**& Form EXPORT_TO_EXCEL*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** -->P_L_FILENAME text*----------------------------------------------------------------------*FORM export_to_excel USING i_filename. 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 git_vbap 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 = 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 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 = i_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. ENDFORM.在status上加了两个按钮,一个是标准的spreadsheet按钮(&XXL),一个是自定义的按钮(DOWN),供下载结果对比使用。 代码简单说明: 1) cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform是用来指定下载的excel格式的,也就是模拟了标准按钮的那个format选择步骤,这个类方法中用到了接口if_salv_bs_xml中的一些属性,10就标识是下载成.xlsx格式的文件。 2) SCMS_XSTRING_TO_BINARY可以将Xtring转化成二进制格式并保存到内表中 以上。 标签:excel下载 最后编辑于:2017/2/15作者:石头![]() 该用户很懒,还没有介绍自己。 阅读 石头 的其他文章 给 石头 发送站内信 上一篇: ABAP中运算符小结 下一篇: 介绍一个字符串转换的函数组SCMS_CONV |
CopyRight 2018-2019 实验室设备网 版权所有 |