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'
EXPORTING
filename = p_file2
i_begin_col = 1
i_begin_row = 2
i_end_col = 256
i_end_row = 65000
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 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'
EXPORTING
input = gs_sea_alv-kmein
language = sy-langu
IMPORTING
output = gs_sea_alv-kmein
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
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'
EXPORTING
def_path = 'C:\'
mask = 'Excel(*.xls;*.xlsx)|*.XLSX;*.XLS;'
title = 'Choose File'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 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_file
VALUE(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_dialog
EXPORTING
default_extension = 'xlsx'
default_file_name = l_default_name
file_filter = '*.xlsx'
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.
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'
EXPORTING
key = l_wa_objdata
destination = l_dl_filename.
p_file = l_dl_filename.
ENDFORM.
导入模板事物代码 SMW0