SAP/Function

ABAP GUI_UPLOAD 를 이용한 엑셀 업로드

그녀는애교쟁이 2015. 8. 10. 13:33
반응형

SAP 개발을 하다보면 Excel 을 업로드 해야 할 일이 많이 있다. Excel 을 업로드 하는 함수는 여러 종류가 있는데 오늘은 GUI_UPLOAD 를 이용하는 방법을 설명하려고 한다. 다른 함수들은 사용자의 PC의 특성을 타서 실행이 안되는 경우가 있는데 이러한 경우 처리하기가 매우 까다롭다. ( Excel 업로드가 안된다고 사용자 PC 를 포멧하라고 할 수도 없다. ) GUI_UPLOAD 는 이러한 문제가 별로 발생하지 않아서 최후의 선택으로 사용한다. 




[SAP/ABAP] - ABAP File Upload



  TYPES TRUXS_T_TEXT_DATA(4096) TYPE C OCCURS 0.
  DATA : L_RAW_DATA  TYPE TRUXS_T_TEXT_DATA WITH HEADER LINE.
  DATA : L_FILENAME TYPE  STRING.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                      = L_FILENAME
     FILETYPE                      = 'ASC'
     HAS_FIELD_SEPARATOR           = ' '
     HEADER_LENGTH                 = 0
     READ_BY_LINE                  = 'X'
*     DAT_MODE                      = ' '
*     CODEPAGE                      = ' '
*     IGNORE_CERR                   = ABAP_TRUE
*     REPLACEMENT                   = '#'
*     CHECK_BOM                     = ' '
*     VIRUS_SCAN_PROFILE            =
*     NO_AUTH_CHECK                 = ' '
*     ISDOWNLOAD                    = ' '
*   IMPORTING
*     FILELENGTH                    =
*     HEADER                        =
    TABLES
      DATA_TAB                      = L_RAW_DATA
*   CHANGING
*     ISSCANPERFORMED               = ' '
   EXCEPTIONS
     FILE_OPEN_ERROR               = 1
     FILE_READ_ERROR               = 2
     NO_BATCH                      = 3
     GUI_REFUSE_FILETRANSFER       = 4
     INVALID_TYPE                  = 5
     NO_AUTHORITY                  = 6
     UNKNOWN_ERROR                 = 7
     BAD_DATA_FORMAT               = 8
     HEADER_NOT_ALLOWED            = 9
     SEPARATOR_NOT_ALLOWED         = 10
     HEADER_TOO_LONG               = 11
     UNKNOWN_DP_ERROR              = 12
     ACCESS_DENIED                 = 13
     DP_OUT_OF_MEMORY              = 14
     DISK_FULL                     = 15
     DP_TIMEOUT                    = 16
     OTHERS                        = 17.

  IF SY-SUBRC <> 0.
    MESSAGE I001 WITH '업로드 오류가 발생하였습니다.'  DISPLAY LIKE 'E'.
    EXIT .
  ENDIF.
  
* TAB 으로 구분된 내용을 잘라서 Internal Table 에 append 한다.
  LOOP AT L_RAW_DATA.
    SPLIT L_RAW_DATA
       AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB    " Tab을 기준으로 분리
     INTO LS_ITAB-FIELD1 LS_ITAB-FIELD2 LS_ITAB-FIELD3 LS_ITAB-FIELD4
    APPEND : LS_ITAB TO LT_ITAB.
    CLEAR : LS_ITAB.
  ENDLOOP.

* Header line 삭제
  IF LT_ITAB[] IS NOT INITIAL.
    DELETE LT_ITAB INDEX 1. 
  ELSE.
    MESSAGE I001 WITH '데이타가 존재하지 않습니다.' .
  ENDIF.


GUI_UPLOAD 함수의 장점은 속도가 빠르다는 것이다. 데이터의 양이 많을 경우 다른 OLE 를 사용해서 업로드하는 함수에 비해 처리 속도가 빠르다. 단점으로는 다른 함수의 경우 지정한 Internal table 에 바로 입력까지 가능하거나 Row, Col 단위의 처리가 가능하나 GUI_UPLOAD 의 경우 텍스트 형태로 업로드가 되기 때문에 하나하나 분리하여 필요에 따라 변형을 해 주어야 한다.


SAP 라는 시스템이 큰 만큼 다양한 방법이 있지만 여러 종류를 사용할 줄 알아야 문제가 생겼을 때 다른 방식으로 처리를 할 수 있을 것이다. 댓글이나 질문은 항상 환영합니다.^^