PARAMETERS : p_file LIKE rlgrap-filename
MODIF ID fil
DEFAULT 'C:\Z0001.xls'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_filename_get USING p_file.
DATA: l_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
PERFORM frm_excel_to_table USING p_file.
PERFORM frm_fill_itab.
*&---------------------------------------------------------------------*
*& Form frm_filename_get
*&---------------------------------------------------------------------*
* 获取本地文件
*----------------------------------------------------------------------*
FORM frm_filename_get USING file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = 'C:\'
mask = ',*.xls.'
mode = '0'
title = 'Find the input file'
IMPORTING
filename = file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " frm_filename_get
*&---------------------------------------------------------------------*
*& Form frm_excel_to_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FILENAME text
* -->P_TABLE text
*----------------------------------------------------------------------*
FORM frm_excel_to_table USING value(p_filename).
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_filename
i_begin_col = 1
i_begin_row = 1
i_end_col = 3
i_end_row = 9999
TABLES
intern = l_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 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.
IF l_intern[] IS INITIAL.
MESSAGE s000 WITH text-e20 DISPLAY LIKE 'E'.
REJECT.
ENDIF.
ENDFORM. " frm_excel_to_table
*&---------------------------------------------------------------------*
*& Form frm_fill_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fill_itab .
DATA: oref TYPE REF TO cx_root,
text TYPE string,
l_message TYPE string.
CHECK l_intern[] IS NOT INITIAL.
*- 将EXCEL传到自定义内表
LOOP AT l_intern.
AT NEW row.
IF sy-tabix NE 1.
APPEND itab. CLEAR: itab.
ENDIF.
ENDAT.
MOVE l_intern-row TO itab-line.
CASE l_intern-col.
WHEN 1.
MOVE l_intern-value TO itab-matnr. " Material
WHEN 2.
TRY.
MOVE l_intern-value TO itab-meng_from. " Quantity From
CATCH cx_sy_conversion_no_number INTO oref.
CLEAR text.
l_message = itab-line.
CONDENSE l_message NO-GAPS.
text = oref->get_text( ).
CONCATENATE 'Line:'
l_message
text INTO l_message SEPARATED BY space.
MESSAGE l_message TYPE 'E'.
ENDTRY.
WHEN 3.
TRY.
MOVE l_intern-value TO itab-meng_to. " Quantity To
CATCH cx_sy_conversion_no_number INTO oref.
CLEAR text.
l_message = itab-line.
CONDENSE l_message NO-GAPS.
text = oref->get_text( ).
CONCATENATE 'Line:'
l_message
text INTO l_message SEPARATED BY space.
MESSAGE l_message TYPE 'E'.
ENDTRY.
WHEN OTHERS.
ENDCASE.
AT LAST.
APPEND itab. CLEAR itab.
ENDAT.
ENDLOOP.
FREE l_intern.
ENDFORM. " frm_fill_itab