> 文章列表 > ABAP Excel上传相关函数

ABAP Excel上传相关函数

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