批量上传EXCEL到自建表(包括查询删除功能)
*&---------------------------------------------------------------------* *& Report ZFFX001 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zfjw002. TABLES: zfi_jh_gys_dj,sscrfields. *&---------------------------------------------------------------------* *& TYPE POOL *&---------------------------------------------------------------------* TYPE-POOLS: slis. *&---------------------------------------------------------------------* *& ALV varible *&---------------------------------------------------------------------* DATA: it_fields TYPE slis_t_fieldcat_alv. DATA: wa_fields TYPE LINE OF slis_t_fieldcat_alv. DATA: gs_layout TYPE slis_layout_alv, wa_event TYPE slis_alv_event, gt_event TYPE slis_t_event, gs_variant TYPE disvariant, gt_list_top_of_page TYPE slis_t_listheader, g_repid LIKE sy-repid. *&---------------------------------------------------------------------* *& Excel Import global variable *&---------------------------------------------------------------------* DATA: g_filepath TYPE string. "保存文件路径 FIELD-SYMBOLS:<fs_unit> LIKE alsmex_tabline. "Excel单元格 FIELD-SYMBOLS:<fs_value> TYPE any. DATA: g_lines LIKE sy-index VALUE 2. "Excel数据的行数 DATA: g_index LIKE sy-index VALUE 1. "message表的序号 DATA: g_sign TYPE c. "Excel一行是否写入成功的标志 DATA: g_succ LIKE sy-index. "成功更新条数 DATA g_fail TYPE i VALUE 0. "失败的行数 DATA g_flag TYPE char1. "标记 CONSTANTS : s_ctumode TYPE ctu_params-dismode VALUE 'N', "屏幕不可见 s_cupdate TYPE ctu_params-updmode VALUE 'S'. "同步模式 DATA t_xlstmp TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE. "保存Excel中读取的记录 DATA:BEGIN OF wa_message, znumb TYPE int4, message TYPE char255, END OF wa_message. DATA it_message LIKE wa_message OCCURS 0 WITH HEADER LINE."提示信息 DATA: BEGIN OF t_data OCCURS 0, znumb TYPE int4, "该次上传的excel内的序号 datab TYPE zfi_jh_gys_dj-ww100, zbzflx TYPE zfi_jh_gys_dj-zbzflx, lifnr TYPE zfi_jh_gys_dj-lifnr, datbi TYPE zfi_jh_gys_dj-ww100, ww100 TYPE zfi_jh_gys_dj-datbi, zdj TYPE zfi_jh_gys_dj-zdj, waers TYPE zfi_jh_gys_dj-waers, zsfcny TYPE zfi_jh_gys_dj-zsfcny, lines TYPE int4, "保存行号 flag TYPE char1, "标记该行数据是否合法 END OF t_data. DATA:BEGIN OF wa_itab. INCLUDE STRUCTURE zfi_jh_gys_dj. DATA: sel TYPE char1, flag TYPE char1, END OF wa_itab. DATA t_itab LIKE wa_itab OCCURS 0 WITH HEADER LINE. DATA t_dj LIKE zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE. DATA it_alv_d LIKE t_itab OCCURS 0 WITH HEADER LINE . *DATA:BEGIN OF i_text OCCURS 0, * znumb TYPE char10, * bukrs TYPE char10, * spmon TYPE char10, * zylx TYPE char10, * zdj TYPE char10, * meins TYPE char10, * END OF i_text. DATA g_text TYPE char100. DATA:wa_dj LIKE zfi_jh_gys_dj. *&---------------------------------------------------------------------* *& gloabel variable *&---------------------------------------------------------------------* DATA: ok_code LIKE sy-ucomm, save_ok LIKE sy-ucomm. DATA:save_ok1 LIKE sy-ucomm. *&---------------------------------------------------------------------* *& Macro Definition *&---------------------------------------------------------------------* DEFINE macro_fieldcat. wa_fields-fieldname = &1. TRANSLATE wa_fields-fieldname TO UPPER CASE. wa_fields-seltext_l = &2. wa_fields-outputlen = &3. wa_fields-edit = &4. APPEND wa_fields TO it_fields. CLEAR:wa_fields. END-OF-DEFINITION. *&---------------------------------------------------------------------* *& Selection Screen *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK block0 WITH FRAME TITLE TEXT-001. PARAMETERS: r1 RADIOBUTTON GROUP g DEFAULT 'X'. SELECT-OPTIONS: * s_bukrs FOR zfi_jh_gys_dj-bukrs, * s_spmon FOR zfi_jh_gys_dj-spmon, * s_zylx FOR zfi_jh_gys_dj-zylx, * s_zxhlx FOR zfi_jh_gys_dj-zxhlx. s_ww100 FOR zfi_jh_gys_dj-ww100, s_datab FOR zfi_jh_gys_dj-datab. PARAMETERS: r2 RADIOBUTTON GROUP g . PARAMETERS: g_fname LIKE rlgrap-filename. "输入文件名称 *PARAMETERS: r3 RADIOBUTTON GROUP g . *PARAMETERS:p_fname TYPE string DEFAULT 'C:/油类型单价信息维护上传模板.XLS'. SELECTION-SCREEN END OF BLOCK block0. SELECTION-SCREEN FUNCTION KEY 1. " Download template *&---------------------------------------------------------------------* *& File Impoft screen *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR g_fname. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING def_path = 'c:\' " 对话框默认打开路径 mask = ',Excel Files,*.xls,'(101) "文件类型过滤 mode = 'O' "文件打开的目的 title = '请选择要导入的Excel文件!' "对话框标题 IMPORTING filename = g_fname EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 0 . STOP. ENDIF. CLEAR g_filepath. g_filepath = g_fname. * 判断是否为excel文件 SEARCH g_filepath FOR '.xls'. IF sy-subrc <> 0. MESSAGE s003(msgnr) WITH '文件类型错误,请选择Excel数据文件!'. STOP. ENDIF. INITIALIZATION. sscrfields-functxt_01 = '模板下载'. AT SELECTION-SCREEN. IF sscrfields-ucomm = 'FC01' . PERFORM fm_download_template. " 下载模板 ENDIF. START-OF-SELECTION. IF r1 EQ 'X'. PERFORM frm_query. ELSEIF r2 = 'X'. PERFORM frm_excel. * ELSEIF r3 = 'X'. * * PERFORM frm_download. ELSE. ENDIF. *&---------------------------------------------------------------------* *& Form frm_query *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_query. FREE:t_itab[]. SELECT * FROM zfi_jh_gys_dj INTO CORRESPONDING FIELDS OF TABLE t_itab WHERE ww100 IN s_ww100 AND datab IN s_datab . CLEAR it_alv_d[]. it_alv_d[] = t_itab[]. SORT t_itab BY ww100 zbzflx datab. gs_layout-zebra = 'X'. gs_layout-info_fieldname = 'LINE_COLOR'. gs_layout-box_fieldname = 'SEL'. PERFORM fr_build_fieldcats. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_save = 'A' i_callback_program = sy-repid i_callback_pf_status_set = 'SET_PF_STATUS' i_callback_user_command = 'FRM_UCOMM' it_fieldcat = it_fields[] is_layout = gs_layout TABLES t_outtab = t_itab EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. "frm_query *&---------------------------------------------------------------------* *& Form fr_build_fieldcats *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM fr_build_fieldcats. REFRESH it_fields. macro_fieldcat 'WW100' '注册号' '8' ''. macro_fieldcat 'DATAB' '开始生效日期' '8' ''. macro_fieldcat 'ZBZFLX' '飞机保障费类型' '2' 'X'. macro_fieldcat 'LIFNR' '供应商' '10' 'X'. macro_fieldcat 'DATBI' '有效截至日期' '8' 'X'. macro_fieldcat 'ZDJ' '单价' '20' 'X'. macro_fieldcat 'WAERS' '货币码' '5' 'X'. macro_fieldcat 'ZSFCNY' '是否以CNY记账' '1' 'X'. ENDFORM. "fr_build_fieldcats *&---------------------------------------------------------------------* *& Form set_pf_status *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM set_pf_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN'. ENDFORM. "Set_pf_status *&---------------------------------------------------------------------* *& Form frm_ucomm *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->R_UCOMM text * -->RS_SELFIELD text *----------------------------------------------------------------------* FORM frm_ucomm USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA l_flag(1). FIELD-SYMBOLS <fs_itab> LIKE wa_itab. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lr_grid. CALL METHOD lr_grid->check_changed_data. rs_selfield-refresh = 'X'."这个值可以让alv制动刷新 CLEAR l_flag. CASE:r_ucomm. WHEN 'SAVE'. DATA gt_update TYPE STANDARD TABLE OF zfi_jh_gys_dj WITH HEADER LINE. REFRESH gt_update[]. LOOP AT t_itab. MOVE-CORRESPONDING t_itab TO gt_update. APPEND gt_update. CLEAR t_itab. ENDLOOP. SORT gt_update BY ww100 datab. DATA gt_update_d LIKE zfi_jh_gys_dj OCCURS 0 WITH HEADER LINE. LOOP AT it_alv_d. CLEAR gt_update. READ TABLE gt_update WITH KEY ww100 = it_alv_d-ww100 datab = it_alv_d-datab BINARY SEARCH. IF sy-subrc <> 0."删掉后数据和原数据匹配不到的数据放在另一张表 CLEAR gt_update_d. MOVE-CORRESPONDING it_alv_d TO gt_update_d. APPEND gt_update_d. ENDIF. ENDLOOP. LOOP AT gt_update_d. "从配置表删除已经删掉行项目的数据 DELETE FROM zfi_jh_gys_dj WHERE ww100 = gt_update_d-ww100 AND datab = gt_update_d-datab. ENDLOOP. MODIFY zfi_jh_gys_dj FROM TABLE gt_update. COMMIT WORK . MESSAGE '保存成功' TYPE 'S'. CLEAR gt_update. WHEN 'DELETE'. DELETE t_itab WHERE sel = 'X'. WHEN OTHERS. ENDCASE. ENDFORM. "FRM_UCOMM *&---------------------------------------------------------------------* *& Form frm_excel *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_excel. DATA l_flag(1). IF g_fname IS INITIAL. MESSAGE s003(msgnr) WITH '请选择要导入的Excel文件' DISPLAY LIKE 'E'. STOP. ENDIF. PERFORM frm_read_from_excel. IF it_message[] IS INITIAL. PERFORM frm_import_data. IF it_message[] IS NOT INITIAL. PERFORM show_message. ELSE. MESSAGE '数据导入成功!' TYPE 'S' DISPLAY LIKE 'S'. ENDIF. ELSE. PERFORM show_error. ENDIF. ENDFORM. "frm_excel *&---------------------------------------------------------------------* *& Form frm_read_from_excel *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_read_from_excel. DATA l_value TYPE char100. DATA l_flag TYPE char1. DATA l_count LIKE sy-subrc. DATA l_message TYPE string. REFRESH t_xlstmp. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = g_fname i_begin_col = 1 i_begin_row = 2 "从第二行开始读 i_end_col = 9 i_end_row = 65536 TABLES intern = t_xlstmp EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc NE 0 . MESSAGE s003(msgnr) WITH '读取文件失败,请检查Excel数据文件!'. STOP. ENDIF. *由于t_xlstmp-row的长度限制,所以最多只能上传9999行数据(包含标题行) *控制最多条目不能超过9998 DATA:l_znumber TYPE i. DATA:l_p TYPE p. DATA:i TYPE p. CLEAR:i. LOOP AT t_xlstmp. i = i + 1. ENDLOOP. i = i / 9 ."9为每行的列数 IF i > 9998. MESSAGE i398(00) WITH '上传条目数不能超过9998条!'. EXIT. ELSE. CLEAR:t_xlstmp. READ TABLE t_xlstmp WITH KEY row = '9999'. IF sy-subrc = 0. MESSAGE i398(00) WITH '上传条目数不能超过9998条!'. EXIT. ENDIF. ENDIF. CLEAR t_data. SORT t_xlstmp BY row col . LOOP AT t_xlstmp ASSIGNING <fs_unit>. ASSIGN COMPONENT <fs_unit>-col OF STRUCTURE <fs_unit> TO <fs_value> . l_value = <fs_unit>-value . CONDENSE l_value. CASE <fs_unit>-col. WHEN 1. t_data-znumb = l_value+0(10). WHEN 2. PERFORM frm_check_ww100_exists USING '注册号' l_value. WHEN 3. PERFORM frm_check_datab_exists USING '开始生效日期' l_value. WHEN 4. PERFORM frm_check_zbzflx_exists USING '飞机保障费类型' l_value. WHEN 5. PERFORM frm_check_lifnr_exists USING '供应商' l_value. WHEN 6. PERFORM frm_check_datbi_exists USING '有效截至日期' l_value. WHEN 7. PERFORM frm_check_zdj_exists USING '单价' l_value. WHEN 8. PERFORM frm_check_waers_exists USING '货币码' l_value. WHEN 9. PERFORM frm_check_zsfcny_exists USING '是否以CNY记账' l_value. ENDCASE. AT END OF row . * CLEAR:wa_dj. * SELECT SINGLE begda endda FROM zfi_jh_gys_dj * INTO CORRESPONDING FIELDS OF wa_dj * WHERE bukrs = t_data-bukrs * AND zylx = t_data-zylx * AND zxhlx = t_data-zxhlx * AND spmon = t_data-spmon. * IF sy-subrc = 0. * CLEAR:g_text. * g_text = '年月在系统中已存在数据;'. * PERFORM frm_add_error_mes USING t_data-znumb g_text. * ENDIF. APPEND t_data. CLEAR t_data. ENDAT. ENDLOOP. ENDFORM. "frm_read_from_excel *&---------------------------------------------------------------------* *& Form frm_add_error_mes *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_PERNR text * -->P_MSG text * -->P_LINES text *----------------------------------------------------------------------* FORM frm_add_error_mes USING p_znumb p_msg . g_flag = 'X'. "设置本行的错误标记 CLEAR wa_message. wa_message-znumb = p_znumb. wa_message-message = p_msg. APPEND wa_message TO it_message. ENDFORM. "frm_add_error_mes *&---------------------------------------------------------------------* *& Form frm_check_bukrs_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_ww100_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(8) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-ww100 = p_value+0(8). ENDIF. ENDFORM. " frm_check_bukrs_exists *&---------------------------------------------------------------------* *& Form frm_check_spmon_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_datab_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(8) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-datab = p_value+0(8). ENDIF. ENDFORM. " frm_check_spmon_exists *&---------------------------------------------------------------------* *& Form frm_check_zylx_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_zbzflx_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(2) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-zbzflx = p_value+0(2). ENDIF. ENDFORM. " frm_check_zylx_exists *&---------------------------------------------------------------------* *& Form frm_check_zxhlx_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_lifnr_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(10) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-lifnr = p_value+0(10). ENDIF. ENDFORM. " frm_check_zxhlx_exists *&---------------------------------------------------------------------* *& Form frm_check_zdj_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_datbi_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(8) = ''. CONCATENATE p_text p_value+0(30) '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-datbi = p_value+0(8). ENDIF. ENDFORM. " frm_check_zdj_exists *&---------------------------------------------------------------------* *& Form frm_check_meins_exists *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM frm_check_zdj_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(30) CN '0123456789. ' . CONCATENATE p_text p_value+0(30) '不是数值字段;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-zdj = p_value+0(30). ENDIF. ENDFORM. " frm_check_meins_exists *&---------------------------------------------------------------------* *& Form FRM_CHECK_WAERS_EXISTS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0808 text * -->P_L_VALUE text *----------------------------------------------------------------------* FORM frm_check_waers_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(5) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-waers = p_value+0(5). ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_ZSFCNY_EXISTS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0815 text * -->P_L_VALUE text *----------------------------------------------------------------------* FORM frm_check_zsfcny_exists USING p_text p_value. DATA l_text TYPE char100. IF p_value+0(1) = ''. CONCATENATE p_text '不能为空;' INTO l_text. PERFORM frm_add_error_mes USING t_data-znumb l_text. EXIT. ELSE. t_data-zsfcny = p_value+0(1). ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form show_error *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM show_error . MESSAGE s398(00) WITH '数据检查有错误,未导入数据!'. REFRESH it_fields. macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''. macro_fieldcat 'MESSAGE' '错误内容' '50' ''. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_save = 'A' i_callback_program = sy-repid i_callback_pf_status_set = 'SET_PF_STATUS' * i_callback_user_command = 'FRM_UCOMM' it_fieldcat = it_fields[] is_layout = gs_layout TABLES t_outtab = it_message EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " show_error *&---------------------------------------------------------------------* *& Form frm_import_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM frm_import_data. DATA l_text TYPE char100. DATA l_message TYPE string. DATA l_count LIKE sy-subrc. FREE:t_dj[]. LOOP AT t_data. MOVE-CORRESPONDING t_data TO t_dj. APPEND t_dj. ENDLOOP. IF t_dj[] IS NOT INITIAL. MODIFY zfi_jh_gys_dj FROM TABLE t_dj. "更新数据库 IF sy-subrc = 0. MESSAGE s398(00) WITH '更新成功;'. ELSE. MESSAGE e398(00) WITH '更新失败;'. ENDIF. ENDIF. ENDFORM. "frm_import_data *&---------------------------------------------------------------------* *& Form show_message *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM show_message. DATA: ls_layout TYPE slis_layout_alv, l_fieldcat TYPE slis_fieldcat_alv, ls_fieldcat TYPE slis_t_fieldcat_alv, l_temp TYPE string, l_str TYPE string. FIELD-SYMBOLS: <fs_msg> LIKE wa_message. MESSAGE s398(00) WITH '数据更新有错误,错误如下!(所有均未导入)'. REFRESH it_fields. macro_fieldcat 'ZNUMB' 'EXCEL表内序号' '15' ''. macro_fieldcat 'MESSAGE' '错误内容' '50' '' . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_save = 'A' i_callback_program = sy-repid i_callback_pf_status_set = 'SET_PF_STATUS' * i_callback_user_command = 'FRM_UCOMM' it_fieldcat = it_fields[] is_layout = gs_layout TABLES t_outtab = it_message EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. "show_message **&---------------------------------------------------------------------* **& Form FRM_DOWNLOAD **&---------------------------------------------------------------------* ** text **----------------------------------------------------------------------* ** --> p1 text ** <-- p2 text **----------------------------------------------------------------------* *FORM frm_download . * * * FREE:i_text[]. * i_text-znumb = '序号'. * i_text-bukrs_fx = '公司'. * i_text-spmon = '年月'. * i_text-zylx = '油类型'. * i_text-zdj = '单价'. * i_text-meins = '单位'. * APPEND i_text. * * * CALL METHOD cl_gui_frontend_services=>gui_download * EXPORTING * filename = p_fname "fullpath " * write_field_separator = 't' * filetype = 'ASC' * codepage = '8400' "GB2312中文章编码 * CHANGING * data_tab = i_text[]. * IF sy-subrc = 0. * MESSAGE s398(00) WITH '模板已下载到' p_fname. * ELSE. * MESSAGE i398(00) WITH '模板下载失败'. * ENDIF. * *ENDFORM. " FRM_DOWNLOAD *&---------------------------------------------------------------------* *& Form FM_DOWNLOAD_TEMPLATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM fm_download_template . DATA: l_filename TYPE string, l_fullpath TYPE string, l_path TYPE string, l_key TYPE wwwdatatab, l_mime TYPE TABLE OF w3mime. l_key-relid = 'MI'. l_key-objid = 'ZFX003'. CALL FUNCTION 'WWWDATA_IMPORT' EXPORTING key = l_key TABLES mime = l_mime EXCEPTIONS wrong_object_type = 1 import_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = 'Download File' default_extension = '.XLS' default_file_name = '机号及供应商对应的单价上传模板' file_filter = cl_gui_frontend_services=>filetype_excel 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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF l_fullpath IS INITIAL. RETURN. ENDIF. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = l_fullpath filetype = 'BIN' * write_field_separator = cl_abap_char_utilities=>horizontal_tab TABLES data_tab = l_mime EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. 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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通