上载EXCEL文件到SAP系统内表FUNCTION

来源:互联网 发布:淘宝店铺更改旺旺名字 编辑:程序博客网 时间:2024/06/05 07:03

思路:在选择屏幕中点开选择电脑中需要上传的EXCEL文件( PERFORM FILESYSTEM_SHOW CHANGING G_SUBRC P_FILE.),文件上传后用相应FUNCTIONG传到内表中。(ZHRIT101)

 

 

FORM filesystem_show  CHANGING pl_subrc    TYPE i
                                                        pl_file     TYPE rlgrap-filename.


  DATA: l_file_tab TYPE filetable,
         l_file     TYPE file_table,
         l_title    TYPE string.

  l_title = text-001.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = l_title
    CHANGING
      file_table              = l_file_tab
      rc                      = pl_subrc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      OTHERS                  = 4.

  CHECK sy-subrc = 0.
  LOOP AT l_file_tab INTO l_file.
    str_file = l_file.
    MOVE str_file TO pl_file.
    EXIT.
  ENDLOOP.

ENDFORM.                    " FILESYSTEM_SHOW,从电脑中选择excel文件

 

 

FORM upload_excel_file .

  DATA: lt_intern LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.

  DATA: l_tabix LIKE sy-tabix.
  DATA: l_begcol TYPE i,
        l_begrow TYPE i,
        l_endcol TYPE i,
        l_endrow TYPE i,
        l_string TYPE string.

** 設定上傳的Excel file所要讀取的範圍
  MOVE : '1'     TO l_begcol,
         '1'     TO l_begrow,
         '5'   TO l_endcol,                                        "excel文件中实际用到多少列就填多少
         '65535' TO l_endrow.                                     "65536应该是最大行数吧,呵呵!

  FIELD-SYMBOLS : <field> TYPE ANY.

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = l_begcol
      i_begin_row             = l_begrow
      i_end_col               = l_endcol
      i_end_row               = l_endrow
    TABLES
      intern                  = lt_intern
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

 

     IF SY-SUBRC <> 0.
         MESSAGE '读取EXCEL出现错误' TYPE 'E'.
    ELSE.

** 当第一笔为HEADER时,删除
    DELETE IT_INTERN WHERE ROW = 1.


** 检查上传档案是否有资料
    IF IT_INTERN IS INITIAL.
      MESSAGE '请检查你EXCEL是否有数据' TYPE 'I'.
      EXIT.
    ENDIF.

  SORT IT_INTERN BY ROW COL.
    LOOP AT IT_INTERN.
      AT NEW  ROW.
        g_col = 1.
      ENDAT.
      IF g_col = 1.
              codeIF SY-SUBRC <> 0.
         MESSAGE '读取EXCEL出现错误' TYPE 'E'.
    ELSE.

** 当第一笔为HEADER时,删除
    DELETE IT_INTERN WHERE ROW = 1.


** 检查上传档案是否有资料
    IF IT_INTERN IS INITIAL.
      MESSAGE '请检查你EXCEL是否有数据' TYPE 'I'.
      EXIT.
    ENDIF.

  SORT IT_INTERN BY ROW COL.
    LOOP AT IT_INTERN.

********************本来是想 CASE IT_INTERN-COL,可不行哦,不知道为什么,就设了个g_COL的变量*******

      g_col = IT_INTERN-COL.         

        CASE g_col.
          WHEN 1.
            PERFORM transfer_pernr_to_sap USING IT_INTERN-VALUE CHANGING IT_BJTAB-PERNR.
          WHEN 2.
            PERFORM transfer_date_to_sap USING IT_INTERN-VALUE CHANGING IT_BJTAB-BEGDA.
          WHEN 3.
            IT_BJTAB-INFOTYPE = IT_INTERN-VALUE.
          WHEN 4.
            IT_BJTAB-SUBTY = IT_INTERN-VALUE.
          WHEN 5.
            IT_BJTAB-PBYER = IT_INTERN-VALUE.
         ENDCASE.
         CLEAR IT_INTERN.

**************************一行内表全都填到工作区后,要附加到内表中*********************8888
       AT END OF ROW.
         APPEND IT_BJTAB.
         CLEAR IT_BJTAB.
       ENDAT.

    ENDLOOP.

ENDFORM.