ABAP

[ABAP] 엑셀 데이터 업로드

ABAPer. 2022. 11. 28. 10:52

PARAMETERS 값으로 데이터를 생성할 엑셀파일을 받습니다.  

파일경로를 붙여줍니다. 

실행하면 생성된 데이터를 볼수 있습니다. 

임의로 만든 테이블에 엑셀파일로 받은 데이터를 생성시켜줬습니다. 

 

[코드]

*&---------------------------------------------------------------------*
*& 파일입력받기
*&---------------------------------------------------------------------*

PARAMETERS PA_INT TYPE RLGRAP-FILENAME. "엑셀파일 받을 파라미터 생성 


INITIALIZATION."엑셀파일 초기값 설정 

AT SELECTION-SCREEN OUTPUT

AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_INT .

*&---------------------------------------------------------------------*
*& 파일경로 붙이기
*&---------------------------------------------------------------------*
  DATA LT_FILE TYPE FILETABLE,"파일 FILETABLE타입
              LV_RC   TYPE I.
  DATA LS_FILE TYPE STRING"파일명 STRING타입

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    CHANGING
      FILE_TABLE LT_FILE
      RC         LV_RC.

  READ TABLE LT_FILE INTO LS_FILE INDEX 1.
  IF SY-SUBRC 0.
    PA_INT   LS_FILE.
  ENDIF.

*&---------------------------------------------------------------------*
*& 엑셀값 불러오기
*&---------------------------------------------------------------------*

START-OF-SELECTION.

  DATA LT_INTERN TYPE TABLE OF ALSMEX_TABLINE,
         LS_INTERN TYPE ALSMEX_TABLINE.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME    PA_INT
      I_BEGIN_COL "1COL부터 데이터 추출
      I_BEGIN_ROW "2ROW부터 데이터 추출
      I_END_COL   10 "10COL까지 데이터 추출
      I_END_ROW   100 "100ROW까지 데이터 추출
    TABLES
      INTERN      LT_INTERN.
* EXCEPTIONS
*   INCONSISTENT_PARAMETERS       = 1
*   UPLOAD_OLE                    = 2
*   OTHERS                        = 3.

*&---------------------------------------------------------------------*
*& 엑셀값 테이블에 넣기 "PK값은 중복안됨 APPEND 안되고 수정만됨 
*&---------------------------------------------------------------------*
  DATA GT_EXCEL TYPE TABLE OF ZSCARR, "엑셀데이터를 넣을 테이블
             GS_EXCEL LIKE LINE OF GT_EXCEL.

  LOOP AT LT_INTERN INTO LS_INTERN.
    CASE LS_INTERN-COL.
      WHEN 1.
        GS_EXCEL-MANDT LS_INTERN-VALUE.
      WHEN 2.
        GS_EXCEL-CARRID LS_INTERN-VALUE.
      WHEN 3.
        GS_EXCEL-CARRNAME LS_INTERN-VALUE.
      WHEN 4.
        GS_EXCEL-CURRCODE LS_INTERN-VALUE.
      WHEN 5.
        GS_EXCEL-URL LS_INTERN-VALUE.
    ENDCASE.

    AT END OF ROW.
      APPEND GS_EXCEL TO GT_EXCEL . "테이블에  APPEND
      CLEAR GS_EXCEL.
    ENDAT.


  ENDLOOP.
  SORT GT_EXCEL BY CARRID. "데이터 SORT 

  MODIFY ZSCARR FROM TABLE GT_EXCEL. "테이블에 넣기

*&---------------------------------------------------------------------*
*& 생성한 데이터 ALV로 보여주기
*&---------------------------------------------------------------------*
  DATA GO_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER" ALV
             GO_ALV  TYPE REF TO CL_GUI_ALV_GRID.
  DATA OK_CODE TYPE SY-UCOMM.


  CALL SCREEN '0100'.

END-OF-SELECTION.

**&---------------------------------------------------------------------*
**& Module STATUS_0100 OUTPUT
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'S100'.
  SET TITLEBAR 'T100'.
ENDMODULE.

MODULE INT_ALV OUTPUT.
  IF GO_CONT IS INITIAL.
    CREATE OBJECT GO_CONT
      EXPORTING
        CONTAINER_NAME              'EXCEL1' "레이아웃 이름으로 지정하기
      EXCEPTIONS
        CNTL_ERROR                      1
        CNTL_SYSTEM_ERROR     2
        CREATE_ERROR                3
        LIFETIME_ERROR              4
        LIFETIME_DYNPRO_DYNPRO_LINK 5
        OTHERS                              6.
    IF SY-SUBRC <> 0.
      " MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      "           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    CREATE OBJECT GO_ALV
      EXPORTING
        I_PARENT          GO_CONT
      EXCEPTIONS
        ERROR_CNTL_CREATE 1
        ERROR_CNTL_INIT   2
        ERROR_CNTL_LINK   3
        ERROR_DP_CREATE   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.

    CALL METHOD GO_ALV->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME                         'zscarr'  "테이블 데이터 디스플레이가 됩니다.
        "IS_variant = gs_variant
        I_SAVE                                                   'A'
      CHANGING
        IT_OUTTAB                                             GT_EXCEL
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION 1
        PROGRAM_ERROR                                2
        TOO_MANY_LINES                                 3
        OTHERS                                                   4.
    IF SY-SUBRC <> 0.
*   Implement suitable error handling here
    ENDIF.


  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  CASE OK_CODE.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0"program(종료)
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CLEAR_OK_CODE  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CLEAR_OK_CODE INPUT.

  CLEAR OK_CODE.


ENDMODULE.