ABAP Excel上传相关函数
EXCEL上传函数:ALSM_EXCEL_TO_INTERNAL_TABLE
注意标准函数中的一个单元格的最大长度是50位,如果想输入更多的值,可以将其复制出来修改
DATA: typedescr_ref TYPE REF TO cl_abap_typedescr.DATA: BEGIN OF lt_excel OCCURS 0. "excel上载内表INCLUDE STRUCTURE alsmex_tabline.DATA: END OF lt_excel.FIELD-SYMBOLS: <fs_excel> LIKE LINE OF lt_excel,<fs_value>.DATA:lv_kbetr TYPE char20.DATA:lv_date_str TYPE char10.CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename = p_file2i_begin_col = 1i_begin_row = 2i_end_col = 256i_end_row = 65000TABLESintern = lt_excelEXCEPTIONSinconsistent_parameters = 1upload_ole = 2OTHERS = 3.SORT lt_excel BY row col.LOOP AT lt_excel ASSIGNING <fs_excel>." 将值动态分配ASSIGN COMPONENT <fs_excel>-col OF STRUCTURE gs_sea_freight TO <fs_value>.IF sy-subrc EQ 0." 通过值获取描述来对数量进行校验typedescr_ref = cl_abap_typedescr=>describe_by_data( <fs_value> ).IF typedescr_ref->absolute_name = '\\TYPE=DATAB' OR typedescr_ref->absolute_name = '\\TYPE=DATBI'.IF <fs_excel>-value IS NOT INITIAL.lv_date_str = <fs_excel>-value.PERFORM frm_date_change CHANGING lv_date_str.<fs_value> = lv_date_str.ENDIF.ELSE.<fs_value> = <fs_excel>-value.ENDIF.ENDIF."在行变化的时候 将每行的数据添加到内表AT END OF row.MOVE-CORRESPONDING gs_sea_freight TO gs_sea_alv.gs_sea_alv-kappl = 'M'.gs_sea_alv-kschl = 'ZFC1'.IF gs_sea_alv-ekorg IS INITIAL .gs_sea_alv-msg = 'Purchasing organization is empty!'.gs_sea_alv-icon = icon_red_light.ENDIF.IF gs_sea_alv-aland IS INITIAL .gs_sea_alv-msg = gs_sea_alv-msg && 'Country is empty!'.gs_sea_alv-icon = icon_red_light.ENDIF.IF gs_sea_alv-inco1 IS INITIAL .gs_sea_alv-msg = gs_sea_alv-msg && 'Incoterms (Part 1) is empty!'.gs_sea_alv-icon = icon_red_light.ENDIF.IF gs_duty_alv-werks IS INITIAL .gs_duty_alv-msg = gs_sea_alv-msg && 'Plant is empty!'.gs_duty_alv-icon = icon_red_light.ENDIF.IF gs_sea_alv-matnr IS NOT INITIAL .TRANSLATE gs_sea_alv-matnr TO UPPER CASE.gs_sea_alv-matnr = |{ gs_sea_alv-matnr ALPHA = IN }|.ELSE.gs_sea_alv-msg = gs_sea_alv-msg && 'Matrial is empty!'.gs_duty_alv-icon = icon_red_light.ENDIF.IF gs_sea_alv-kmein IS NOT INITIAL .CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'EXPORTINGinput = gs_sea_alv-kmeinlanguage = sy-languIMPORTINGoutput = gs_sea_alv-kmeinEXCEPTIONSunit_not_found = 1OTHERS = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.ELSE.ENDIF.IF gs_sea_alv-datab IS NOT INITIAL .PERFORM frm_date_change CHANGING gs_sea_alv-datab.ELSE.gs_sea_alv-msg = gs_sea_alv-msg && 'Valid From is empty!'.gs_sea_alv-icon = icon_red_light.ENDIF.IF gs_sea_alv-datbi IS INITIAL .gs_sea_alv-datbi = '99991231'.ENDIF.APPEND gs_sea_alv TO gt_sea_alv.CLEAR: gs_sea_alv,gs_sea_freight.ENDAT.ENDLOOP.
选择屏幕文件的F4搜索帮助示例代码
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.PERFORM frm_get_excel USING p_file1.FORM frm_get_excel USING p_file.CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGdef_path = 'C:\\'mask = 'Excel(*.xls;*.xlsx)|*.XLSX;*.XLS;'title = 'Choose File'IMPORTINGfilename = p_fileEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc <> 0 AND sy-subrc <> 3.MESSAGE e001(00) WITH 'Choose file error'.ENDIF.
ENDFORM.
选择屏幕下载模板示例代码
SELECTION-SCREEN END OF BLOCK bk1.SELECTION-SCREEN: FUNCTION KEY 1.INITIALIZATION.functxt-icon_id = icon_export.functxt-quickinfo = 'Template download'.functxt-icon_text = 'Template download'.sscrfields-functxt_01 = functxt.AT SELECTION-SCREEN.CASE sscrfields-ucomm.WHEN 'FC01'.IF p_r1 IS NOT INITIAL .PERFORM frm_download_template USING p_file1'ZMM005''Duty Upload Template_'.ENDIF.IF p_r2 IS NOT INITIAL .PERFORM frm_download_template USING p_file2'ZMM006''Sea Freight Upload Template_'.ENDIF.IF p_r3 IS NOT INITIAL .PERFORM frm_download_template USING p_file3'ZMM007''Inbound Cost Upload Template_'.ENDIF.ENDCASE.*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_FILE
*& --> P_
*&---------------------------------------------------------------------*
FORM frm_download_template USING p_fileVALUE(p_objid)VALUE(p_name).DATA: l_wa_objdata TYPE wwwdatatab,l_dl_filename TYPE rlgrap-filename,l_filename TYPE string,l_path TYPE string,l_fullpath TYPE string,l_default_name TYPE string.CONCATENATE p_name sy-datum INTO l_default_name .CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGdefault_extension = 'xlsx'default_file_name = l_default_namefile_filter = '*.xlsx'CHANGINGfilename = l_filenamepath = l_pathfullpath = l_fullpathEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.CHECK NOT l_fullpath IS INITIAL.l_dl_filename = l_fullpath.l_wa_objdata-relid = 'MI'.l_wa_objdata-objid = p_objid.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGkey = l_wa_objdatadestination = l_dl_filename.p_file = l_dl_filename.
ENDFORM.
导入模板事物代码 SMW0