SAP ABAP 엑셀 업로드 로직




엑셀에 있는 데이터를 SAP에 올리기 위해 EXCEL 업로드 펑션을 사용한다.


엑셀 파일을 업로드 할 파라미터 타입은 RLGRAP-FILENAME 를 사용한다.


PARAMETERS :    P_FILE TYPE RLGRAP-FILENAME










내컴퓨터에서 업로드 하기 위해  셀렉션이벤트
AT SELECTION SCREEN에서 F4 엑셀을 만들어 준다.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*    DEF_FILENAME     = 'C:\'.. "  Preset file name
      DEF_PATH         'C:\'   " Preset path
*    MASK             = SPACE    " Selection screen
*    MODE             = SPACE    " S = Save, O = Open
*    TITLE            = SPACE    " Title of the selection window
    IMPORTING
      FILENAME         =   FILE " Selected file name
*    RC               =     " not used
    EXCEPTIONS
      INV_WINSYS       1
      NO_BATCH         2
      SELECTION_CANCEL 3
      SELECTION_ERROR  4
      OTHERS           5



파일을 올리고 실행하면 함수를 통해 엑셀에서 데이터를 가지고 오도록한다.



AT SELECTION-SCREEN.

  DATA GV_INDEX TYPE I,
         LT_EXCEL LIKE TABLE OF KCDE_CELLS,
         LS_EXCEL LIKE KCDE_CELLS.
         

  FIELD-SYMBOLS <FS1>.

  CHECK FILE IS NOT INITIAL.

  "엑셀 데이터 변환 (엑셀데이터 -> LT_EXCEL)
  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
      FILENAME                FILE " 업로드 파일
      I_BEGIN_COL             1   " 시작열
      I_BEGIN_ROW             2   " 시작행
      I_END_COL               256   " 종료열
      I_END_ROW               60000 " 종료행
    TABLES
      INTERN                  LT_EXCEL
    EXCEPTIONS
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2.

  IF LT_EXCEL IS INITIAL.

    MESSAGE '파일이 존재하지 않습니다.' TYPE 'E'.

  ENDIF.







LT_EXCEL에 엑셀의 데이터가 담기게 된다.

담기는 데이터는 컬럼마다 하나씩 담기게 된다.


예를 들어 이런 엑셀의 데이터 가 들어간다면 

LS_EXCEL-ROW     = 1, 
LS_EXCEL-COL  = 1
LS_EXCEL-VALUE = 사과 
로 데이터를 받아와서 ALV에 띄우기 위해서는 가공하는 과정이 필요하다.

이때, 엑셀의 필드와 데이터 가공시 받을 인터널 테이블(GS_EXCEL)의 필드가 같아야 
같은 필드에 정확하게 들어간다.

엑셀 데이터를 받고 ALV에 추가적인 데이터나 필드를 넣고 싶다면 
ALV용 인터널 테이블(GS_DISPLAY)에 데이터를 가공해서 넣어주면 된다.



 
 CLEAR GS_EXCEL,
          GT_EXCEL.

  "엑셀 데이터 -> 인터널 테이블
  LOOP AT LT_EXCEL INTO LS_EXCEL
    CLEAR GV_INDEX.
    MOVE LS_EXCEL-COL TO GV_INDEX.

    ASSIGN COMPONENT GV_INDEX OF STRUCTURE GS_EXCEL TO <FS1>.
    MOVE LS_EXCEL-VALUE TO <FS1>.

    AT END OF ROW
      APPEND GS_EXCEL TO GT_EXCEL.
      CLEAR :GS_EXCEL.
    ENDAT.

    CLEAR LS_EXCEL.

  ENDLOOP.



  LOOP AT GT_EXCEL INTO GS_EXCEL.

    MOVE-CORRESPONDING GS_EXCEL TO GS_DISPLAY.

    APPEND GS_DISPLAY TO GT_DISPLAY.

  ENDLOOP.


ENDFORM.                    



다음 이전