johnson_yao tech note

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  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

posted on 2011-05-16 15:40  johnson_yao  阅读(359)  评论(0编辑  收藏  举报